衝突はありません。ns0
プレフィックスは、 の子孫に対して上書きされるだけです<child>
。
この XML ドキュメント
<ns0:parent xmlns:ns0="parent-space">
<ns0:child xmlns:ns0="child-space"/>
</ns0:parent>
と同等です
<ns0:parent xmlns:ns0="parent-space">
<ns1:child xmlns:ns1="child-space"/>
</ns0:parent>
と
<parent xmlns="parent-space">
<child xmlns="child-space"/>
</parent>
parent
との有効な名前空間に関する限りchild
。
プレフィックスを宣言するために nsmap を使用できます。効果的な結果は同じですが、シリアル化すると混乱が少なくなります。
from lxml import etree
NS_MAP = {
"p" : "http://parent-space.com/",
"c" : "http://child-space.com/"
}
NS_PARENT = "{%s}" % NS_MAP["parent"]
NS_CHILD = "{%s}" % NS_MAP["child"]
parent = etree.Element(NS_PARENT + "parent", nsmap=NS_MAP)
child = etree.SubElement(parent, NS_CHILD + "child")
child.text = "Some Text"
print etree.tostring(parent, pretty_print=True)
これは印刷します
<p:parent xmlns:p="http://parent-space.com/" xmlns:c="http://child-space.com/">
<c:child>Some Text</c:child>
</p:parent>