2012-07-25 12 views
8

मैं एक डोम नोड के सभी विशेषताओं के माध्यम से पुनरावृति और नाम और मानअजगर minidom - विशेषताओं के माध्यम से पुनरावृति करने के लिए कैसे, और उनके नाम और मान

मैं कुछ इस तरह की कोशिश की पाने के लिए चाहते हैं (डॉक्स नहीं बहुत वर्बोज़ थे इस पर तो मैं एक छोटे से अनुमान लगाया):

for attr in element.attributes: 
    attrName = attr.name 
    attrValue = attr.value 
  1. पाश के लिए भी शुरू नहीं करता है
  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 

मैं अजगर करने के लिए नया हूँ, कोमल कृपया

+1

आप परिस्थितियों से मजबूर हैं minidom उपयोग करने के लिए? 'Xml.etree.ElementTree' अधिक आरामदायक है। – pepr

+0

धन्यवाद, मुझे लगता है कि मुझे कोई संसाधन नहीं मिला क्योंकि मिनीडॉम अब और उपयोग नहीं किया गया है ... कोशिश करेगा ... –

उत्तर

13

क्या आप को प्राप्त करने की कोशिश कर रहे एक अधिक उपयोगी शब्दकोश आप आगे बढ़ सकते हैं करने के लिए उन असुविधाजनक विशेषता NamedNodeMap हस्तांतरण करने के लिए है, तो यह आसानी से

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

करने के लिए एक छोटी और कुशल (और pythonic?) तरीका नहीं है जैसा इस प्रकार

#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

गुण होना एक NamedNodeMap जो काफी एक शब्दकोश की तरह बर्ताव करता है, लेकिन वास्तव में एक शब्दकोश नहीं है देता है। attributes के बजाय iteritems() पर लूपिंग करने का प्रयास करें। (ध्यान रखें कि एक नियमित रूप से dict से अधिक पाशन वैसे भी चाबियाँ पर लूप होता है, तो अपने कोड किसी भी मामले में अपेक्षा के अनुरूप काम नहीं होता रखें।)

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] 
संबंधित मुद्दे