9

我想遍历 dom 节点的所有属性并获取名称和值

我尝试过这样的事情(文档对此不是很冗长,所以我猜了一点):

for attr in element.attributes:
    attrName = attr.name
    attrValue = attr.value
  1. for 循环甚至没有开始
  2. 让循环工作后,如何获取属性的名称和值?

循环错误:

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

我是Python新手,请温柔

4

3 回答 3

17

有一种简单有效的(和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)])
于 2012-11-14T15:52:53.530 回答
2

好的,在查看了这个(有点小)文档之后,我猜想下面的解决方案会成功

#attr is a touple apparently, and items() is a list
for attr in element.attributes.items():
    attrName = attr[0] 
    attrValue = attr[1]
于 2012-07-25T20:36:32.557 回答
1

attributes 返回 a NamedNodeMap,它的行为很像字典,但实际上不是字典。尝试循环iteritems()代替attributes。(请记住,循环遍历常规 dict 无论如何都会遍历键,因此您的代码在任何情况下都不会按预期工作。)

于 2012-07-25T17:09:54.370 回答