에서 XML 노드를 계산하는 가장 효율적인 방법은 무엇이며, 분명히 나는 한 번에 전체 파일을 구문 분석 할 수 없습니다 부품을 파싱하고 그들과 함께 무엇이든하십시오.내가 1-2gb까지 거대한 XML 파일이 자바
특정 노드의 수는 어떻게 계산합니까? 따라서 파일을 분할하는 데 필요한 부품 수를 추적 할 수 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 나는 모든 제안은 감사에 열려있어
질문 업데이트 :
그럼 내가 STAX를 사용 했, 어쩌면 내가 그것을 사용하고 논리가 잘못, 나는 각각 다음 파일을 구문 분석하고 있습니다 노드 노드 값을 가져 와서 문자열 작성기 안에 저장합니다. 그런 다음 다른 방법으로 나는 물결 모양의 stringbuilder로 가서 출력을 편집합니다. 그런 다음 해당 출력을 파일에 씁니다. 이런 식으로 10000 개를 초과 할 수는 없습니다. 여기
내가 얻을 예외 :Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.sun.org.apache.xerces.internal.util.NamespaceSupport.<init>(Unkno
wn Source)
at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.setNamespace
Context(Unknown Source)
at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.getXMLEvent(
Unknown Source)
at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.allocate(Unk
nown Source)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Sour
ce)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX.bridge(Unk
nown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX.parse(Unkn
own Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
mIdentity(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(Unknown Source)
이 사실 나는 내 모든 접근 방식이 잘못 생각, 내가 실제로 CSV 샘플로 XML 파일을 변환 할 노력하고있어. 여기가 내가 지금까지 그것을 할 방법은 다음과 같습니다
- 얻을 각 요소 노드 텍스트 노드 값에 대한 읽기/구문 분석 XML 파일
- 열기 스트림은 n 개의 노드 (임시) 파일에 쓸 다음 씻고 가까운 스트림
- 는 그런 다음 적절한 CSV 출력을 생성
"이처럼 10000 개가 넘는 개체가 아닙니다"라는 것은 무엇을 의미합니까? 잡은 오류 또는 예외는 무엇입니까? –
STAX API는 많은 메모리를 사용하지 않지만 STAX가 반복을 수행 할 때 자신의 프로그램이 많은 양의 데이터를 저장하고 있다면 STAX의 오류가 아닙니다. 다른 XML API를 선택하지 않고 자신의 메모리 관리를 정렬해야합니다. – skaffman
왜 값을 stringbuilder에 저장합니까? 독립형 노드 값으로 작업 할 수없는 이유는 무엇입니까? – josefx