Python Minidom - как перебирать атрибуты и получать их имя и значение
Я хочу перебрать все атрибуты узла dom и получить имя и значение
я попробовал что-то вроде этого (документы были не очень подробными, поэтому я немного догадался):
for attr in element.attributes:
attrName = attr.name
attrValue = attr.value
- цикл for даже не запускается
- как я могу получить имя и значение атрибута, как только я получу цикла?
Петли Ошибку:
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 над ключами в любом случае, поэтому ваш код не будет работать так, как ожидалось в любом случае.)