沒有衝突。前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>
清理命名空間只是刪除未使用的命名空間,但不會重新映射命名空間唯一的名稱。 – Martin