2014-01-22 85 views
0

所以,我已经看到了很多针对此问题的答案,但是它们并没有明确说明如何在整个XML文档范围内更改命名空间前缀。python 2.7 XML lxml命名空间前缀属性问题

我有什么:

<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忍者可以从他们的快乐宫下台,并指导这个新生,我会永远感激。

回答

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> 

>>> 
+0

谢谢主席先生!这正是我想要的。 –

相关问题