Python Minidom - how to iterate through attributes, and get their name and value

Eran Medan picture Eran Medan · Jul 25, 2012 · Viewed 15.6k times · Source

I want to iterate through all attributes of a dom node and get the name and value

I tried something like this (docs were not very verbose on this so I guessed a little):

for attr in element.attributes:
    attrName = attr.name
    attrValue = attr.value
  1. the for loop doesn't even start
  2. how do I get the name and value of the attribute once I get the loop to work?

Loop Error:

for attr in element.attributes:
  File "C:\Python32\lib\xml\dom\minidom.py", line 553, in __getitem__
    return self._attrs[attname_or_tuple]
 KeyError: 0

I'm new to Python, be gentle please

Answer

Ar3s picture Ar3s · Nov 14, 2012

There is a short and efficient (and pythonic ?) way to do it easily

#since items() is a tUple list, you can go as follows :
for attrName, attrValue in element.attributes.items():
    #do whatever you'd like
    print "attribute %s = %s" % (attrName, attrValue)

If what you are trying to achieve is to transfer those inconvenient attribute NamedNodeMap to a more usable dictionary you can proceed as follows

#remember items() is a tUple list :
myDict = dict(element.attributes.items())

see http://docs.python.org/2/library/stdtypes.html#mapping-types-dict and more precisely example :

d = dict([('two', 2), ('one', 1), ('three', 3)])