Python Minidom - 如何遍历属性,获取其名称和值

时间:2012-07-25 16:47:10

标签: python python-3.x minidom

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

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

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

    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新手,请温柔

3 个答案:

答案 0 :(得分:13)

有一种简短而有效(和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)])

答案 1 :(得分:2)

好的,看了this (somewhat minimal) documentation之后,我猜想以下解决方案取得了成功

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

答案 2 :(得分:1)

属性返回NamedNodeMap,其行为与字典非常相似,但实际上并不是字典。请尝试循环iteritems() attributes {{1}}。 (请记住,无论如何,循环遍历常规字典都会在键上循环,因此在任何情况下,您的代码都无法正常工作。)