2012-07-09 14 views
8

lxml.etree.iterparse फ़ंक्शन का उपयोग करके निम्न पायथन फ़ाइल को पार्स करने का प्रयास कर रहा है।पायथन के साथ बड़ी एक्सएमएल फ़ाइल को पार्सिंग - etree.parse त्रुटि

"sampleoutput.xml"

<item> 
    <title>Item 1</title> 
    <desc>Description 1</desc> 
</item> 
<item> 
    <title>Item 2</title> 
    <desc>Description 2</desc> 
</item> 

मैं etree.iterparse (myFile) कहते हैं मैं myFile = खुला ("/ उपयोगकर्ताओं/eric/डेस्कटॉप/wikipedia_map से पहले किया था से Parsing Large XML file with Python lxml and Iterparse

कोड की कोशिश की /sampleoutput.xml","r ")

लेकिन यह निम्न त्रुटि जाता

Traceback (most recent call last): 
    File "/Users/eric/Documents/Programming/Eclipse_Workspace/wikipedia_mapper/testscraper.py", line 6, in <module> 
    for event, elem in context : 
    File "iterparse.pxi", line 491, in lxml.etree.iterparse.__next__ (src/lxml/lxml.etree.c:98565) 
    File "iterparse.pxi", line 543, in lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:99086) 
    File "parser.pxi", line 590, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74712) 
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 5, column 1 

कोई विचार? धन्यवाद!

+1

यह हो सकता है कि आपकी XML फ़ाइल दूषित है:

निम्नलिखित दस्तावेज़ अपने मौजूदा कोड के साथ सही परिणाम का उत्पादन? इसमें कोई ' C0deH4cker

+1

मुझे एलएक्सएमएल नहीं पता, लेकिन आपका उदाहरण वैध एक्सएमएल नहीं है। एक एक्सएमएल दस्तावेज़ में एक रूट तत्व होना चाहिए। आपका नहीं है –

+1

आपको रूट तत्व की आवश्यकता नहीं है, न केवल बाल नोड्स। – pinkdawn

उत्तर

7

समस्या यह है कि एक्सएमएल अच्छी तरह से गठित नहीं है अगर उसके पास बिल्कुल एक शीर्ष-स्तरीय टैग नहीं है। आप पूरे दस्तावेज़ को <items></items> टैग में लपेटकर अपना नमूना ठीक कर सकते हैं। आप जिस क्वेरी का उपयोग कर रहे हैं उससे मेल खाने के लिए आपको <desc/> टैग की भी आवश्यकता है (description)।

<items> 
    <item> 
    <title>Item 1</title> 
    <description>Description 1</description> 
    </item> 
    <item> 
    <title>Item 2</title> 
    <description>Description 2</description> 
    </item> 
</items> 
+0

क्या होगा यदि फ़ाइल इतनी बड़ी है और मैं इसे स्मृति में लोड नहीं करना चाहता हूं, इसलिए मैं इसे iterparse का उपयोग कर पार्स कर रहा हूं? –

3

जहां तक ​​मुझे पता है, xml.etree.ElementTree आमतौर पर एक्सएमएल फ़ाइल को "रूट" तत्व रखने की अपेक्षा करता है, यानी एक एक्सएमएल टैग जो पूर्ण दस्तावेज़ संरचना को संलग्न करता है। आपके द्वारा पोस्ट किए गए त्रुटि संदेश से मैं मानता हूं कि यह समस्या भी है:

'लाइन 5' दूसरे <item> टैग को संदर्भित करता है, इसलिए मुझे लगता है कि पायथन शिकायत करता है कि अनुमानित मूल तत्व के बाद निम्नलिखित डेटा है (यानी पहला <item> टैग) बंद था।

संबंधित मुद्दे