lxml:删除输出中的虚拟命名空间?



我正在使用lxml来生成SVG。请考虑以下代码:

import lxml.etree as Etree
Root = Etree.Element("svg", nsmap={None: "http://www.w3.org/2000/svg",
"xlink": "http://www.w3.org/1999/xlink"})
Link = Etree.SubElement(Root, 'a')
Link.set("{xlink}href", "#")
Etree.SubElement(Link, "text", y="12").text = "test"
print(Etree.tostring(Root, encoding="utf-8", pretty_print=True,
xml_declaration=True).decode("utf-8"))

这输出

<?xml version='1.0' encoding='utf-8'?>
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
<a xmlns:ns0="xlink" ns0:href="#">
<text y="12">test</text>
</a>
</svg>

请注意,lxml 会ns0"虚拟"命名空间,并将href放入其中。 如何让 lxml 摆脱它并只输出xlink:href

添加xlink:href属性时需要使用正确的命名空间 URI。

改变

Link.set("{xlink}href", "#")

Link.set("{http://www.w3.org/1999/xlink}href", "#")

最新更新