2014-04-08 6 views
0

입력으로받은 매우 큰 XML이 있습니다. 이 XML에서 나는 단지 하나의 자식 요소 만 필요로한다. 하나의 요소 만 검색하기 위해 전체 XML을 구문 분석하면 성능이 과다한 것처럼 보입니다. 이 문제를 해결하기위한 더 좋은 방법이 있습니까?XML 구문 분석 : 하나의 필드에 대해 전체 XML 구문 분석

XML을 구문 분석하고 XPath를 사용하여 원하는 필드를 검색하는 데 DocumentBuilder API를 사용하는 것이 한 가지 방법입니다. 그러나 parse 메서드는 여전히 전체 xml을 불필요하게 구문 분석합니다. xpath를 취하고 XPath에 따라 XML을 구문 분석하는 파서의 구현에 오버로드 된 구문 분석 메소드가 있습니까?

+0

grep.는 STAX 사용을 고려 사용

다른 옵션은 방법으로 간단하게 이동하는 것입니다. http://stackoverflow.com/questions/7215931/reading-huge-xml-file-using-stax-and-xpath –

답변

1

필요한 것은 SAX 파서 또는 유사한 빠른 파서입니다. SAX 파서는 전체 XML을 구문 분석하지 않고 XML 요소를 찾고자하는 요소를 찾을 때까지 구문 분석합니다.

wikipedia's link에서 SAX 파서를 읽을 수 있습니다. 또한 살펴 봐야 the java docs for SAX parser

1

XML 데이터를 올바르게 처리하기위한 구문 분석 방법은 없지만 전체 문서의 메모리 내 표현을 만드는 방법은 분명합니다. Java는 이벤트 기반 SAX 구문 분석을 제공합니다. XML 이벤트에 대한 이벤트 핸들러를 구현하고, 필요한 컨텐츠로가는 모든 것을 무시하고, 찾고있는 파트를 검색 한 후에 중지 할 수 있습니다. 입니다.

most XPath processors work with SAX as well 이래로 잠재적으로 XPath 프로세서에 이벤트를 제공하고 해당 방식으로 원하는 태그를 찾을 수 있습니다. 그러나 이것은 단일 요소를 가져와야하는 상황의 경우 과도한 것일 수 있습니다.

0

XPath operates over the document object model. XPath 표현식을 평가하려면 DOM이 있어야합니다. 그렇지 않으면 무엇에 대해 유효성을 검사합니까?

문서를 구문 분석하지 않으려면 XPath가 부족합니다. 다른 옵션은 빠른 SAX 구문 분석입니다. 여기서 원하는 요소에 도달 할 때까지 모든 SAX 구문 분석 이벤트를 무시하고 원하는 텍스트를 추출한 다음 나머지 구문 분석 프로세스를 취소합니다.