所以,我已经看到很多针对这个问题的答案,但是当它在XML文档的整个范围内发生变化时,他们没有明确说明如何调整名称空间前缀。
我有什么:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<ns0:Description xmlns:ns0="http://purl.org/NET/FOO">
</ns0:Description>
</rdf:RDF>
我想要的是什么:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://purl.org/NET/FOO">
</rdf:Description>
</rdf:RDF>
要澄清,我希望子级子元素xmlns:rdfs
为rdf:about
。
以前在Python2.5中工作的内容:
rdf_description = SubElement(
root,
'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description',
{'rdf:about':vocab_namespace}
)
我在Python2.7中尝试过的内容:
register_namespace('rdf', 'rdf:about')
rdf_description = SubElement(
root,
'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description',
nsmap={'rdf': rdf_url}
)
... 好我已经尝试了这么长的排列列表(这是我目前的方式),但我似乎无法改变我需要的位置它们。
如果一个真正的lxml忍者可以从他们的快乐宫下台并指导这个新手,我将永远感激。
答案 0 :(得分:2)
这对你有用吗?
RDFNS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
root = lxml.etree.Element('{%s}RDF' % RDFNS, nsmap={'rdf': RDFNS})
rdf_description = lxml.etree.SubElement(
root,
'{%s}Description' % RDFNS,
{"{%s}about" % RDFNS: "http://purl.org/NET/FOO"})
检查输出:
>>> print lxml.etree.tostring(root, pretty_print=True)
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://purl.org/NET/FOO"/>
</rdf:RDF>
>>>