4
我正在嘗試使用lxml.etree從JSON對象創建一個xml樹。在其中一些標記名CONTIN冒號的東西,如: -帶有「:」的lxml標籤名稱
「設置:當前的」我試着用
「{設置}當前」作爲標籤的名字,但我得到這個: -
NS0 :當前xmlns:ns0 =「設置」
我正在嘗試使用lxml.etree從JSON對象創建一個xml樹。在其中一些標記名CONTIN冒號的東西,如: -帶有「:」的lxml標籤名稱
「設置:當前的」我試着用
「{設置}當前」作爲標籤的名字,但我得到這個: -
NS0 :當前xmlns:ns0 =「設置」
是的,首先閱讀並理解XML命名空間。然後用它來生成XML樹與命名空間:U
>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace'}
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'], nsmap=MY_NAMESPACES)
>>> etree.tostring(e)
'<settings:current xmlns:settings="http://example.com/url-for-settings-namespace"/>'
而且你可以結合起來,與默認命名
>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace', None: 'http://example.com/url-for-default-namespace'}
>>> r=etree.Element('my-root', nsmap=MY_NAMESPACES)
>>> d=etree.Element('{%s}some-element' % MY_NAMESPACES[None])
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'])
>>> d.append(e)
>>> r.append(d)
>>> etree.tostring(r)
'<my-root xmlns:settings="http://example.com/url-for-settings-namespace" xmlns="http://example.com/url-for-default-namespace"><some-element><settings:current/></some-element></my-root>'
注意,你必須有一個元素在你的XML樹nsmap=MY_NAMESPACES
層次結構。然後所有的下降節點都可以使用該聲明。你的情況,你有沒有這一點,所以LXML產生的命名空間的名稱,如ns0
此外,當您創建標籤名稱的新節點使用的命名空間URI,沒有命名空間名稱:{http://example.com/url-for-settings-namespace}current
花一些時間來學習XML名稱空間的基礎知識。然後閱讀http://lxml.de/tutorial.html#namespaces。 – mzjn