python - Parsing same content twice with lxml.iterparse -


मुझे नहीं लगता कि यह क्यों काम करता है:

  content = urllib2.urlopen (url) संदर्भ = etree.iterparse (सामग्री, टैग = '{my_ns} my_first_tag') संदर्भ = iter (संदर्भ) # घटना के लिए, संदर्भ में elem: # पास संदर्भ = etree.iterparse (सामग्री, टैग = '{my_ns} my_second_tag') घटना के लिए, संदर्भ में elem: पास  

जहां यह काम नहीं करता है:

  content = urllib2.urlopen (url) context = etree.iterparse ( इवेंट के लिए संदर्भ = ईटर (संदर्भ) संदर्भ में संदर्भ: संदर्भ में elem पास संदर्भ = etree.iterparse (सामग्री, टैग = '{my_ns} my_second_tag') घटना के लिए, संदर्भ में elem: पास  

और मुझे यह त्रुटि देता है:

  XMLSyntaxError: दस्तावेज़ के अंत में अतिरिक्त सामग्री, पंक्ति 1, स्तंभ 1  

क्या मैं एक ही सामग्री को दो बार पार्स नहीं कर सकता? अजीब यह काम कर रहा है जब मैं सिर्फ लूप टिप्पणी करता हूं और संपूर्ण इटरपार्स कमांड नहीं करता हूं।

क्या मुझे कुछ बंद करने में याद आ रही है?

बहुत धन्यवाद

urllib2.urlopen आपको देता है एक फ़ाइल-जैसी ऑब्जेक्ट जिसका उपयोग आप यूआरएल की सामग्री को पढ़ने के लिए कर सकते हैं।

मैं यहाँ अनुमान लगा रहा हूं कि etree.iterparse एक ऑब्जेक्ट देता है जो हो सकता है फिर से, लेकिन तब तक बिल्कुल भी content स्पर्श नहीं करता है उस स्थिति में, पहले लूप संदर्भ का उपयोग कर रहा है सामग्री की सामग्री पर दोबारा, डेटा "उपभोक्ता" के रूप में चला जाता है।

जब आप दूसरा संदर्भ बनाएं, आप वही सामग्री पास कर रहे हैं, जो तब तक "खाली" है।

संपादित करें: जैसा कि आप तरीके से पूछते हैं Reparse ... एक पूरे डेटा को पढ़ने के लिए और फिर इसे अलग से प्रत्येक iterparse कॉल करने के लिए StringIO का उपयोग फ़ाइल के समान ऑब्जेक्ट के रूप में करना होगा Eg। StringIO आयात स्ट्रिंगआईओ # से ... डेटा = content.read () संदर्भ = etree.iterparse (StringIO (डेटा), टैग = '{my_ns} my_first_tag') # प्रसंस्करण। .. संदर्भ = etree.iterparse (StringIO (डेटा), टैग = '{my_ns} my_second_tag') # संसाधन ...


Comments