2012-08-07 8 views
7

Python'da lxml.etree kullanarak büyük bir xml (> 200MB) ayrıştırmak istiyorum. Ben XML dosyasını yüklemek için etree.parse kullanmaya çalıştı, ancak bu durum dosya boyutu için çalışmaz: Büyük XML dosyaları için python lxml.etree kullanma

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 

Ben xpath ifadeler kullanmak istediğimizden

, önce dosyayı ayrıştırmak gerekiyor. Bu nedenle XML dosyasını nasıl ayrıştırabilirim? XML_PARSE_HUGE'u lxml.etree bağlantısıyla nasıl kullanırım?

Teşekkürler!

cevap

15

özel XMLParser örneği oluşturmayı deneyin:

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

çalışıyor. teşekkür ederim. – scdev

+0

Bu hatayla karşılaşırsanız: "python XMLSyntaxError: iç hata: Büyük giriş araması", bu çözüm de işe yarıyor! – ospider