有没有一种方法可以使用ElementTree注册多个名称空间

时间:2020-03-05 17:48:01

标签: python-3.x xml namespaces elementtree

根据文档,似乎一次只能注册一个名称空间。

xml.etree.ElementTree.register_namespace(prefix, uri)

注册名称空间前缀。注册表是全局的,并且任何现有的 给定前缀或名称空间URI的映射将是 删除。 prefix 是名称空间前缀。 uri 是命名空间uri。 此命名空间中的标签和属性将使用 给定前缀(如果可能)。

但是我很好奇是否有人知道这件事吗?如果没有合理的理由,我将切换到lxml。

1 个答案:

答案 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。 :-)