2012-08-08 7 views
0

파싱중인 큰 XML 파일이 있습니다.노드 선택에서 노드를 선택하십시오.

첫 번째 selectNodes 문은 구문 분석하려는 모든 요소의 목록을 가져옵니다.

첫 번째 selectNodes 문에서 반환 된 각 요소에 대해 다른 selectNodes를 실행하고 싶습니다.

XML은 다음과 같습니다 나는 내부 노드를 구문 분석해야하기 때문에

<A> 
    <B></B> 
    <C></C> 
</A> 
<A> 
    <B></B> 
    <C></C> 
</A> 

내가 즉, "A"의 각 부분 집합, 억제하고, 한 번에.

최종 목표는 각 B, C 조합으로 한 번에 하나씩 수행하는 것입니다.

답변

0

원하는 노드를 XPath 표현식의 컨텍스트로 제공 할 수 있습니다. 의 당신이 B 노드를 선택하는 XPath 식을 있다고 가정 해 봅시다 :

XPathExpression expr = xpath.compile("./B"); 

이의 당신이 변수 Node aNode에서 노드를 가정하자. 결과 유형 Node이 될 것입니다 경우 당신은 단순히

Object result = expr.evaluate(aNode, XPathConstants.NODE); 

사용하여 B 요소를 선택할 수 있습니다.

1

xPath에서 이중 슬래시 (//)를 사용하여 부모 노드에서 특정 이름의 모든 노드를 찾을 수 있습니다. 문서 내의 모든 노드를 반환하려면 식을 "//"로 시작할 수 있습니다.

모든 B 노드와 별도의 목록에있는 모든 C 노드를 반환하려면, 시도 :

List<?> bNodes = document.selectNodes("//B"); 
List<?> cNodes = document.selectNodes("//C"); 

for (Object b : bNodes) 
    for (Object c : cNodes) 
    //do something with each b/c combination 

을 또는에서 검색 할 루트 노드를 지정하는 데 사용 :

이 문서가
List<?> bNodes = document.selectNodes("A//B"); 
List<?> cNodes = document.selectNodes("A//C"); 

당신의 파일을 SAXReader로 읽습니다.

관련 문제