2017-11-23 9 views
1

거대한 XML 파일 (2 ~ 10GB 이상)을 자주 수정해야하기 때문에 VTD XML을 실험하고 있습니다.VTD XML (Java) VTDNavHuge 파일에 XPath 결과 쓰기

XPath 쿼리 결과를 다시 파일에 쓰려고합니다. VTD의 XML에서 대용량 파일을 작성 하지만 나에게 명확하지 않다 :

  1. 메소드 getBytes()는 XMLMemMappedBuffer (https://jar-download.com/javaDoc/com.ximpleware/vtd-xml/2.13/com/ximpleware/extended/XMLMemMappedBuffer.html 참조) 저자의

  2. 하나는 "구현되지"되어 있습니다 (?) 이 글 코드 예 (지난 후, 2010-04-21) 그러나 https://sourceforge.net/p/vtd-xml/discussion/379067/thread/a2e03ede/

는 예

으로 오래된되고

Exception in thread "main" java.nio.channels.ClosedChannelException 
    at sun.nio.ch.FileChannelImpl.ensureOpen(Unknown Source) 
    at sun.nio.ch.FileChannelImpl.transferTo(Unknown Source) 
    at com.ximpleware.extended.XMLMemMappedBuffer.writeToFileOutputStream(XMLMemMappedBuffer.java:104) 
    at WriteXML.main(WriteXML.java:16) 

질문 :

    long la = vnh.getElementFragment(); 
    
    는 배열 오래 [] 다음과 같은 오류이

    long[] la = vnh.getElementFragment(); 
    vnh.getXML().writeToFileOutputStream(new FileOutputStream("c:/text2.xml"), (int)la[0], (int)la[1]); 
    

    결과처럼 관련 라인을 적응

    (https://jar-download.com/java-documentation-javadoc.php?a=vtd-xml&g=com.ximpleware&v=2.13 참조) 반환

  • 이것은 코드에서 명백한 실수로 인한 오류?
  • 거대한 XML 파일 (~ 10GB) 을 효율적으로 처리하는 데 어떤 도구를 사용 하시겠습니까? (자바 할 필요가 없습니다.)

내 목표는 변환을 간단하게 할 수 또는 XML을 분할 큰 성능 파일을 다시 작성하는 것입니다. 감사!

+0

버그가 수정되었을 것으로 생각되었으므로 CVS에만 체크인했습니다. –

답변

0

첫 번째 질문에는 대답 할 수 없지만 다른 기술을 찾고 있다면 XSLT 3.0을 스트리밍하는 것이 하나의 요구 사항입니다. 요구 사항에 대한 자세한 내용을 보지 않고 실제로 적합한 지 여부를 알 수 없습니다. .

0

먼저 거대한 크기의 XML을 처리하기 위해 mem-map 모드를 사용하여 xml을 메모리에로드하는 것이 좋습니다. 그리고 vtd-xml은 xml의 기본 바이트 형식을 변경하지 않으므로 바이트 이동 작업과 그 성능 이점을 앞뒤로 많이 인코딩/디코딩하는 것을 쉽게 상상할 수 있습니다. 당신이 지적한 것처럼

, XMLMemMappedBuffer getBytes가 구현되지 않습니다 ...이

작업 주위에 XMLMemMappedBuffer의 writeToFileOutputStream() 메서드를 사용하는 것입니다 ... 조각이 매우 큰 경우 과도한 메모리 사용을 방지하는 것입니다 그것을 출력하기 위해 직접 덤프하십시오. 즉, 조각의 오프셋과 길이를 알고 있다면 ... getBytes는 종종 우회 할 수 있습니다.

다음은이 방법의 서명 문서입니다.

공개 무효 writeToFileOutputStream (java.io.FileOutputStream의 OST를, OS 긴, ​​긴 렌) 는 자바 .io 슬로우IOException 세그먼트 (오프셋 및 길이로 표시됨)를 출력 파일 스트림에 작성합니다.

+0

답장을 보내 주셔서 감사합니다. @vtd -xml-author. 위의 오류가 발생하는 이유를 이해하도록 도와 주시겠습니까? (BTW) VTD 블로그에서 VTDHuge에 대한 최신 예를 찾으십시오. 특히 변환 된 출력 XML을 파일로 저장하는 예제가 특히 유용 할 것입니다. – enahel

+0

약간의 파고를 할 수 있도록 테스트 케이스를 함께 넣을 수 있습니까? 내 끝이야? –