2014-01-22 87 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

謝謝主席先生!這正是我想要的。 –

相關問題