2013-11-20 6 views
1

XML 문서를 RAM에 모두로드하지 않고 파싱 할 수있는 쉬운 방법이 있는지 궁금합니다.
저는 Nokogiri와 표준 Hash.from_xml을 조합하여 (XML에 따라) XML의 내용을 가져 왔습니다.
100 개 또는 1000 개 제품을 (가져 오기 위해) 처리 할 때 그게 다 좋고 좋습니다. 그러나 XML 문서에 16,000 또는 40,000 개의 제품이 포함되어있는 경우 .... 내 Dino가 실제로이를 실제로 느끼기 시작합니다.Ruby/Rails가 XML을 메모리에 모두로드하지 않고 XML을 구문 분석합니다.

XML을 메모리로 가져 오지 않고 처리하는 방법이 있는지 궁금합니다.

죄송합니다. 코드가 없습니다. 새로운 것을 쓰는 것을 피하려고합니다. 나는 누가 자신의 XML 파서를 쓰고 싶어 하는지를 의미합니까?

답변

0

XML은 계층 적이므로 구문 분석기는 구조를 올바르게 구문 분석해야 전체 구조를 알 수 있습니다. 당신은 잘 형성된 파편을 Nokogiri::HTML::Document.parse에 먹일 수 있습니다.하지만 그 조각들을 다른 방법으로 가져와야합니다. 봉투 부분을 제거, 실제 제품은 <products> 내에서 싸여있다

<products> 
    <product>stuff</product> 
    <product>...</product> 
    ... and so on 
</products> 

을 다음 각 <product> 그 내용의 배열을 얻기 위해 문자열 분할을 사용하여 :

의 당신은 큰 XML 문서가 있다고 가정 해 봅시다. 그런 다음 이들 각각을 XML 조각으로 구문 분석하십시오. 그냥 생각. 나는 그것을 사용한 적이 있지만

이, 도움이 될 수 있습니다 : https://github.com/soulcutter/saxerator

1

는 내가 60 메가 파일을 통해이 작업을 실행하는 동안

reader = Nokogiri::JSON::Reader(File.open('test.xml')) 

reader.each do |node| 
    if(node.name == 'Product') 
    hash = Hash.from_xml(node.outer_xml).values.first 
    break; 
    end 
end 

나는 나의 메모리로드를 보았다 ...이왔다. 그것은 내 목표를 성취했다. 나는 다른 대답을보고 싶다. 아마도 더 밝은 것도 있습니다.

관련 문제