웹을 검색하여 stackoverflow를 위아래로 검색했습니다. 해결책 없음. 순수한 xslt here 내에서이 작업을 수행하는 방법을 찾았지만.다수의 큰 xml 파일을 하나로 효율적으로 병합
그러나 문제는 결과로 나오는 XML이 수백 MB의 크기가된다는 것입니다. 그래서 자바에서 SAX를 사용해야합니다. (제 xslt 솔루션, xslt ;-)로 태그를 달았음에도 불구하고)
자세히 설명해 드리겠습니다. 필자는 여러 개의 xml 파일 (선호되는 InputSteam)을 파싱해야합니다. XML를 결과
<root>
<doc>
<tag>test1</tag>
</doc>
<doc>
<tag>test2</tag>
</doc>
...
</root>
<root>
<doc>
<tag>test3</tag>
</doc>
<doc>
<tag>test4</tag>
</doc>
...
</root>
inputstream1 + inputstream2 + ... + inputstreamN =
inputstream2 inputstream1
같은 파일 또는의 InputStream의 모습. 모양은 다음과 같습니다
<root>
<doc>
<tag>test1</tag>
</doc>
<doc>
<tag>test2</tag>
</doc>
...
<doc>
<tag>test3</tag>
</doc>
<doc>
<tag>test4</tag>
</doc>
...
</root>
누군가가 해결책이나 링크가 있습니까? 사용자 지정 InputSource를 구현하여이 작업을 수행 할 수 있습니까? 아니면 사용자 지정 ContentHandler를 사용해야합니까? 아니면 joost/stx으로 가능합니까?
좋은 점은 ContentHandler를 사용할 수 있다는 것이 약간의 변형을 적용 할 수 있다는 것입니다 (이미 구현했습니다).
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(customHandler);
xmlReader.parse(getInputSource()); // only one InputStream possible
또는 내의 ContentHandler 내에서 직접에는 InputStream을 구문 분석해야하지만 문제는 내가 InputSource의 여러개의 파일이나의 InputStream의를 통과 할 수있는 방법을 모르겠입니다?
음, xslt에서는 사용자가 어디에 있든 관계없이 첫 번째 노드와 마지막 노드를 조회 할 수 있습니다. 즉 : 모든 것이 기억 속에 있어야합니다 ... xslt의 정의에 따라. 아니면 어떻게 생각하니? – Karussell
상당히 큰 XSLT 프로그램의 하위 세트가 있습니다. 실행하기 위해 메모리에 전체 DOM 트리가 필요하지 않습니다. –
아, 감사합니다. 이제 나는 – Karussell