根据文档,似乎一次只能注册一个名称空间。
xml.etree.ElementTree.register_namespace(prefix, uri)
注册名称空间前缀。注册表是全局的,并且任何现有的 给定前缀或名称空间URI的映射将是 删除。 prefix 是名称空间前缀。 uri 是命名空间uri。 此命名空间中的标签和属性将使用 给定前缀(如果可能)。
但是我很好奇是否有人知道这件事吗?如果没有合理的理由,我将切换到lxml。
答案 0 :(得分:1)
您可以注册多个名称空间,而不必一次调用register_namespace()。
您必须为每个命名空间分别调用register_namespace()。
示例...
import xml.etree.ElementTree as ET
ns_map = {"foo": "urn::foo",
"bar": "urn::bar"}
for prefix, uri in ns_map.items():
ET.register_namespace(prefix, uri)
root = ET.Element(ET.QName(ns_map["foo"], "root"))
ET.SubElement(root, ET.QName(ns_map["bar"], "child"))
print(ET.tostring(root).decode())
打印...
<foo:root xmlns:bar="urn::bar" xmlns:foo="urn::foo"><bar:child /></foo:root>
还...
如果没有合理的理由,我将切换到lxml。
我还是会切换到lxml。 :-)