使用ElementTree列出XML文档中的命名空间定义?

时间:2017-03-23 21:28:50

标签: python xml elementtree

如果我有这样的XML文件:

<root
 xmlns:a="http://example.com/a"
 xmlns:b="http://example.com/b"
 xmlns:c="http://example.com/c"
 xmlns="http://example.com/base">
   ...
</root>

如何获取命名空间定义列表(即xmlns:a="…"等)?

使用:

import xml.etree.ElementTree as ET

tree = ET.parse('foo.xml')
root = tree.getroot()
print root.attrib()

显示空属性字典。

2 个答案:

答案 0 :(得分:1)

通过@mzjn,在评论中,这里有如何使用库存ElementTree:https://stackoverflow.com/a/42372404/407651

import xml.etree.ElementTree as ET
my_namespaces = dict([
    node for (_, node) in ET.iterparse('file.xml', events=['start-ns'])
])

答案 1 :(得分:0)

您可能会发现使用lxml更容易。

from lxml import etree
xml_data = '<root xmlns:a="http://example.com/a" xmlns:b="http://example.com/b" xmlns:c="http://example.com/c" xmlns="http://example.com/base"></root>'

root_node = etree.fromstring(xml_data)
print root_node.nsmap

此输出

{None: 'http://example.com/base',
'a': 'http://example.com/a',
'b': 'http://example.com/b',
'c': 'http://example.com/c'}