2012-08-07 13 views
7

मैं पाइथन में lxml.etree का उपयोग करके एक विशाल xml (> 200MB) का विश्लेषण करना चाहता हूं। मैं etree.parse उपयोग करने के लिए एक्सएमएल फ़ाइल लोड करने के लिए कोशिश की, लेकिन इस फ़ाइल आकार की वजह से काम नहीं करता है:विशाल XML फ़ाइलों के लिए python lxml.etree का उपयोग

etree.parse('file.xml')Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
    File "lxml.etree.pyx", line 2706, in lxml.etree.parse (src/lxml/lxml.etree.c:49958) 
    File "parser.pxi", line 1500, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:71797) 
    File "parser.pxi", line 1529, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:72080) 
    File "parser.pxi", line 1429, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:71175) 
    File "parser.pxi", line 975, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:68173) 
    File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:64257) 
    File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:65178) 
    File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64521) 
lxml.etree.XMLSyntaxError: Excessive depth in document: 256 use XML_PARSE_HUGE option, line 1276, column 7 

मैं xPath अभिव्यक्ति का उपयोग करना चाहते हैं, मैं पहले फ़ाइल को पार्स करने की है। इसलिए मैं XML फ़ाइल को कैसे पार्स कर सकता हूं? lxml.etree के संबंध में मैं XML_PARSE_HUGE का उपयोग कैसे करूं?

धन्यवाद!

उत्तर

15

एक कस्टम XMLParser उदाहरण बनाने के लिए प्रयास करें:

from lxml.etree import XMLParser, parse 
p = XMLParser(huge_tree=True) 
tree = parse('file.xml', parser=p) 
+0

ठीक काम करता है। धन्यवाद। – scdev

+0

यदि आपको यह त्रुटि आती है: "python XMLSyntaxError: आंतरिक त्रुटि: विशाल इनपुट लुकअप", यह समाधान भी काम करता है! – ospider

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