Python Minidom - как перебирать атрибуты и получать их имя и значение

Я хочу перебрать все атрибуты узла dom и получить имя и значение

я попробовал что-то вроде этого (документы были не очень подробными, поэтому я немного догадался):

for attr in element.attributes:
    attrName = attr.name
    attrValue = attr.value
  1. цикл for даже не запускается
  2. как я могу получить имя и значение атрибута, как только я получу цикла?

Петли Ошибку:

for attr in element.attributes:
  File "C:Python32libxmldomminidom.py", line 553, in __getitem__
    return self._attrs[attname_or_tuple]
 KeyError: 0

Я новичок в Python, будьте осторожны, пожалуйста

3 ответов


есть короткий и эффективный (и pythonic ?) способ сделать это легко

#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)

если то, что вы пытаетесь достичь, это из за неудобного атрибута NamedNodeMap для более удобного словаря вы можете действовать следующим образом

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

см.http://docs.python.org/2/library/stdtypes.html#mapping-types-dict а точнее пример :

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

Ok, посмотрев на эта (несколько минимальная) документация, Я догадался к успеху следующее решение

#attr is a touple apparently, and items() is a list
for attr in element.attributes.items():
    attrName = attr[0] 
    attrValue = attr[1]

атрибуты возвращает NamedNodeMap, который ведет себя как словарь, а не словарь. Попробуйте зацикливание iteritems() of attributes вместо. (Имейте в виду, что цикл над регулярными циклами dict над ключами в любом случае, поэтому ваш код не будет работать так, как ожидалось в любом случае.)