如何将命名空间添加到一个属性LXML
问题描述:
我试图创建一个XML条目,看起来像这样使用python和lxml的:如何将命名空间添加到一个属性LXML
<resource href="Unit 4.html" adlcp:scormtype="sco">
我使用Python和lxml的。我在adlcp:scormtype
属性中遇到问题。我是新来的XML,所以如果我错了,请纠正我。 adlcp
是一个命名空间,scormtype
是在adlcp命名空间中定义的属性,对吗?
我甚至不确定这是否是正确的问题,但......我的问题是,如何使用lxml将属性添加到非默认名称空间的元素中?如果这是一个微不足道的问题,我很抱歉。
答
这不是一个完整的答复,但只是几个指针。
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
答
试试这个:
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))
深入Python链接是死的(410飘) – 2012-08-23 10:18:36
@JonasWielicki - 与新的链接更新 – Mark 2012-08-23 12:32:35