2012-07-25 5 views
8

ich über alle Attribute eines DOM-Knoten zu durchlaufen will, und erhalten den Namen und den WertPython Minidom - wie durch Attribute zu durchlaufen, und haben ihre Namen und Wert

Ich habe versucht, so etwas wie diese (docs war nicht sehr ausführlich auf diese so vermutete ich ein wenig):

for attr in element.attributes: 
    attrName = attr.name 
    attrValue = attr.value 
  1. die for-Schleife auch
  2. startet nicht, wie ich den Namen und den Wert des Attributs erhalten, sobald ich die Schleife zu arbeiten?

Loop-Fehler:

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 

Ich bin neu in Python, sanft sein bitte

+1

Sie durch die Umstände gezwungen sind minidom zu benutzen? Der 'xml.etree.ElementTree' ist komfortabler. – pepr

+0

Danke, ich nehme an, dass ich keine Ressourcen gefunden habe, da Minidom nicht mehr benutzt wird ... werde das versuchen ... –

Antwort

13

es gibt einen kurzen und effizienten (und pythonic?) Weg, um es leicht Wenn

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

zu tun, was Sie versuchen, jenes unbequemes Attribut NamedNodeMap zu einem nutzbaren Wörterbuch zu übertragen zu erreichen, sind Sie fortfahren können wie folgt

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

http://docs.python.org/2/library/stdtypes.html#mapping-types-dict und genaues Beispiel sehen:

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

Attribute gibt eine NamedNodeMap, die ähnlich wie ein Wörterbuch verhält, ist aber nicht wirklich ein Wörterbuch. Versuchen Sie, stattdessen iteritems() von attributes zu durchlaufen. (Beachten Sie, dass über einen regelmäßigen dict Looping die Tasten Schleifen über sowieso, so würde den Code nicht wie in jedem Fall erwartet.)

2

Ok, nachdem sie bei this (somewhat minimal) documentation suchen, ich zum Erfolg vermuten die folgende Lösung

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