def xml_parse(xml_file):
"""
Parse an XML file, returns a tree of nodes and a dict of namespaces
:param xml_file: the input XML file
:returns: (doc, ns_map)
"""
root = None
ns_map = {} # prefix -> ns_uri
for event, elem in ET.iterparse(xml_file, ['start-ns', 'start', 'end']):
if event == 'start-ns':
# elem = (prefix, ns_uri)
ns_map[elem[0]] = elem[1]
elif event == 'start':
if root is None:
root = elem
for prefix, uri in ns_map.items():
ET.register_namespace(prefix, uri)
return (ET.ElementTree(root), ns_map)
评论列表
文章目录