2013-03-12 3 views
7

크기가 40GB 인 XML 파일을 구문 분석 한 다음 정규화하고 MySQL 데이터베이스에 삽입해야합니다. 데이터베이스에 저장해야하는 파일의 양이 명확하지 않으며 XML 구조를 알지도 못합니다.PHP에서 매우 큰 XML 파일 구문 분석

어떤 구문 분석기를 사용해야 하나?

+1

는 항상 XMLReader를 같은 풀 파서를 사용; SimpleXML을 위해 40GB의 파일을 메모리에로드 해보십시오. 관련 게시물의 –

+1

: http://stackoverflow.com/questions/911663/parsing-huge-xml-files-in-php?rq=1 – hexblot

+0

40Gb? 와우, 나는 맥 OS X 기계에 700 MB의 XML 파일에 문제가 있었다. –

답변

11

PHP에서, 당신은 XMLReaderDocs와 극단적 인 큰 XML 파일에서 읽을 수 있습니다

$reader = new XMLReader(); 
$reader->open($xmlfile); 

익스트림 큰 XML 파일을 디스크에 압축 된 형식으로 저장해야합니다. XML 파일의 압축률이 높을수록 의미가 있습니다. 예를 들어 large.xml.gz과 같은 gzipped입니다.

$xmlfile = 'compress.zlib://path/to/large.xml.gz'; 

$reader = new XMLReader(); 
$reader->open($xmlfile); 

XMLReader 당신이 현재 요소 "전용"에서 작동 할 수 있습니다 :

PHP 아주 잘와 XMLReadercompression wrappersDocs 비아 것을 지원합니다. 그것은 앞으로 나아갈 수 있다는 것을 의미합니다. 구문 분석기 상태를 유지해야하는 경우 자체 구문을 작성해야합니다.

기본 동작을 요소 또는 하위 요소 만 반복하는 것처럼 XMLReader에서 작동하는 방법을 알고있는 반복기 집합으로 래핑하는 것이 도움이되는 경우가 종종 있습니다. 이 내용은 Parse XML with PHP and XMLReader에 나와 있습니다.

도 참조 : 큰 파일의 경우

2

실제로 XML을 사용하여 수행하려는 작업을 알고 있으면 좋을 것입니다. 해석하는 방법은 수행해야하는 처리와 크기에 따라 다릅니다.

일회성 작업 인 경우 이전에 XML 구조를 검색하여 다른 작업을 시작했습니다. 내 DTDGenerator (saxon.sf.net 참조)는 오래 전에이 목적을 위해 작성되었지만 여전히 작업을 수행 할 수 있습니다. 현재 사용할 수있는 다른 도구가 있지만 여기서는 전제 조건 인 처리를 스트리밍하는지 여부를 알지 못합니다.

끌어 오기 또는 푸시 스트리밍 파서 (SAX 또는 StAX)를 사용하여 데이터를 처리하는 응용 프로그램을 작성할 수 있습니다. 이것이 얼마나 쉬운지는 처리해야하는 처리량과 유지해야하는 상태의 양 (사용자가 알려주지 않은 것)에 따라 다릅니다. 또는 Saxon-EE에서 사용할 수있는 스트리밍 된 XSLT 처리를 시도 할 수도 있습니다.