2012-08-07 4 views
7

파이썬에서 lxml.etree을 사용하여 거대한 xml (> 200MB)을 파싱하고 싶습니다. 나는 XML 파일을로드 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

관련 문제