get the namespaces from xml with python ElementTree

The code for creating a dictionary with all the declared namespaces can be made quite simple. This is all that is needed:

import xml.etree.ElementTree as ET

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

You don’t need to use StringIO or open(). Just provide the XML filename as an argument to iterparse().

Each item provided by iterparse() is an (event, (prefix, namespace-uri)) tuple. The start-ns event is not described in the Python 2.7 documentation of iterparse (but it is mentioned in the corresponding Python 3 documentation).


Note: the code above works in CPython and Jython, but not in IronPython. See
https://github.com/IronLanguages/main/issues/968.

Leave a Comment