JAXP를 사용하여 매우 큰 XML 파일을 DOM 트리에로드하고 결과를 DOM에 수정하고 XPath 쿼리를 실행하려고합니다.DOM 노드의 Java, XPath
지연로드를 사용하여 구현 된 자체 DOM 구현을 사용합니다. 즉 처음에는 DOM의 처음 두 레벨 만 파일에서로드되고 getChildNodes()/etc.가 호출되면 파일로 돌아갑니다 더 많은 레벨로드). 이것은 매우 느리지 만 훨씬 더 큰 파일을로드 할 수 있습니다. 특히 파일의 일부만 사용하는 경우 더욱 그렇습니다.
내 질문 : XPath는 XML에 대한 다른 시각 (afaik)을 사용하고 있습니다. 기본 Oracle JDK 구현이 전체 DOM 문서를 일부 내부 XPath 문서로 변환하는 경우 (전체 문서를 열심히 읽으므로 정말 나쁠 것입니다) 또는 XPath 구현이 직접적으로 작업 할 수 있는지 궁금합니다. DOM 트리 (XPath가 이미로드 된 요소 내에서 평가 될 수있는 경우 더 이상로드되지 않음)
당신은 _ 매우 만족 _ big_ 무엇을 의미합니까 ...이 모든 경우에 정말 나쁜, 정말 나쁜해야 하는가? 그리고 런타임 동안 메모리 소비량을 살펴본다면 당신의 질문에 답을 얻지 못할 것입니까? – jlordo
왜 XPath가 DOM이 아닌 다른 것을 사용하고 있다고 생각합니까? FWIW, 내가 보았던 적어도 하나의 버그가 있습니다.이 버그는 일반적인 형태로 DOM을 사용하고 있음을 나타냅니다 (버그는 트리 전체의 컨텍스트를 기반으로 전체 DOM을 탐색하는 것을 포함합니다). – parsifal
스펙은 DOM을 기본 모델로 언급하지 않으며 Apache Xalan-J 구현 (Oracle JDK에서 afaik로 사용됨)은 일종의 DTM (http://xml.apache.org/xalan-j)을 사용하는 것으로 보입니다 /dtm.html). 그러나 DOM이 DTM에서 완전히 변형되었거나 XPathExpression을 평가하는 데 필요한 특정 부분 만 DTM이 DOM에 대한 어댑터 일 경우 아직 알 수 없습니다. –