2012-07-25 17 views
8

voglio scorrere tutti gli attributi di un nodo DOM e ottenere il nome e il valorePython minidom - come iterare attraverso gli attributi, e ottenere il loro nome e il valore

ho provato qualcosa di simile (documenti non erano molto verbose in questo modo ho indovinato un po '):

for attr in element.attributes: 
    attrName = attr.name 
    attrValue = attr.value 
  1. il ciclo for non ha nemmeno iniziare
  2. come faccio ad avere il nome e il valore dell'attributo, una volta ho l'anello al lavoro?

Errore loop:

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 

Sono nuovo di Python, si prega di essere gentile

+1

State costretti dalle circostanze a usare minidom? Il 'xml.etree.ElementTree' è più comodo. – pepr

+0

Grazie, presumo di non aver trovato risorse in quanto minidom non è più usato ... ci proveremo ... –

risposta

13

C'è un modo breve ed efficiente (e divinatorio?) per farlo facilmente

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

Se ciò che si sta cercando di raggiungere è quello di trasferire quelle attributo scomodo NamedNodeMap a un dizionario più utilizzabile si può procedere come Segue

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

vedere http://docs.python.org/2/library/stdtypes.html#mapping-types-dict e più precisamente ad esempio:

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

attributi restituisce un NamedNodeMap, che si comporta come un dizionario, ma in realtà non è un dizionario. Prova invece a eseguire il ciclo su iteritems() di attributes. (Tenete a mente che il ciclo più di un dict regolare loop sui tasti in ogni caso, in modo che il codice non avrebbe funzionato come previsto in ogni caso.)

2

Ok, dopo aver guardato this (somewhat minimal) documentation, ho indovinato al successo la seguente soluzione

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