python 2.7 XML lxml名称空间前缀属性问题

时间:2014-01-22 22:06:47

标签: python xml python-2.7 lxml xml-namespaces

所以,我已经看到很多针对这个问题的答案,但是当它在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:rdfsrdf: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忍者可以从他们的快乐宫下台并指导这个新手,我将永远感激。

1 个答案:

答案 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>

>>>