我正在尝试使用python和lxml创建一个看起来像这样的xml条目:
<resource href="Unit 4.html" adlcp:scormtype="sco">
我正在使用python和lxml。我在使用adlcp:scormtype
属性时遇到问题。我是xml的新手,所以如果我错了请纠正我。 adlcp
是名称空间,scormtype
是在adlcp名称空间中定义的属性,对吧?
我甚至不确定这是否是正确的问题但是...我的问题是,如何使用lxml从非默认命名空间向元素添加属性?如果这是一个微不足道的问题,我会提前道歉。
答案 0 :(得分:16)
这不是一个完整的回复,只是一些指示。
adlcp不是命名空间,而是命名空间前缀。命名空间在文档中由xmlns:adlcp="http://xxx/yy/zzz"
在lxml中,您始终设置包含命名空间的元素/属性名称,例如
{http://xxx/yy/zzz}scormtype
而不仅仅是scormtype。然后,lxml将自动放入名称空间前缀。
但是lxml会将前缀设置为ns0或类似,除非你做更多的小提琴,但这应该足够,因为前缀并不意味着什么。 (但有些人更喜欢控制前缀名称;请参阅Element和SubElement函数的nsmap参数以及register_namespace函数。)
我会查看lxml tutorial on namespace和Dive into Python - XML chapter
答案 1 :(得分:6)
试试这个:
builder = ElementMaker(namespace="http://a.different.url/blah/v.10",
nsmap={
'adlcp': "http://a.namespace.url/blah/v.10",
'anotherns': "http://a.different.url/blah/v.10"
})
builder.resource()
builder.attrib['href'] = "Unit 4.html"
builder.attrib['{http://a.namespace.url/blah/v.10}scormtype'] = 'sco'
print(etree.tostring(builder, pretty_print=True))