2011-08-25 5 views
0

Xpath 표현식의 서브 트리를 얻는 방법?

<title text=“title1"> 
    <comment id=“comment1"> 
     <data> this is part of comment one</data> 
     <data> this is some more of comment one</data> 
    </comment> 
    <comment id=“comment2”> 
     <data> this is part of comment two</data> 
     <data> this is some more of comment two</data> 
     <data> this is even some more of comment two</data> 
    </comment> 
</title> 

그리고 다음 XPath 쿼리를 받았습니다.

/title/comment/@id 

식이있는 하위 트리를 가져 오는 가장 좋은 방법은 무엇입니까? 속한다.

  • id="comment1"
  • id="comment2"
  •  <comment id="comment1"> 
         <data> this is part of comment one</data> 
         <data> this is some more of comment one</data> 
        </comment> 
    

    그리고 comment2은 다음과 같이 속합니다.

     <comment id=“comment2"> 
         <data> this is part of comment two</data> 
         <data> this is some more of comment two</data> 
         <data> this is even some more of comment two</data> 
        </comment> 
    

    내가 원하는 이유는 Xpath식이 해결 된 하위 트리에서 재귀 적으로 호출을 할 수 있기 때문입니다.

    DOM을 사용하여 자바에서 이것을 코딩하고 있습니다.

    +1

    질문을 제대로 이해하지 못합니다. 의견 요소를 받아야합니까? id 속성을 갖는 comment 요소? –

    +0

    내가 원하는 것은 xpath 표현식 (예 :'/ title/comment/@ id')이 주어지면이 요소 나 속성이있는 하위 트리를 공식화하거나 획득하는 방법이 필요합니까? 나는.'id = comment1'은 첫 번째 ' ...'하위 트리의 일부입니다. – Larry

    답변

    1

    런타임까지 XPath 표현식을 알 수없는 것처럼 들립니다. 그리고 XPath 표현식에 의해 선택된 각 노드의 부모를 얻고 싶습니다 ... 맞습니까? <comment> 요소는 각 comment/@id 특성의 부모입니다. <comment> 요소를 얻는 것은 해당 하위 트리 (자손)를 가져 오는 것과 같습니다. 그 이유는 추가 XPath 표현식이나 DOM 함수를 사용하여 자손을 추출하거나 요소를 자손으로 복사 할 수 있기 때문입니다.

    질문에 대답하는 한 가지 방법은 단순히 XPath 표현식 끝에 "/ .."을 추가하는 것입니다. 예 :

    "/title/comment/@id" 
    

    댄의 대답 @를하는 것과 같습니다

    "/title/comment/@id/.." 
    

    될 것입니다,하지만 쉽게 XPath 표현식이 무엇이든간에로부터 유도 될 수있다.

    +0

    완벽! 이것은 내가 필요한 것입니다. 복사하는 가장 좋은 방법은''노드와 하위 노드를 새로운 DOM 문서로 만드는 것입니다. – Larry

    +0

    @Larry : importNode() 및 appendChild() (http://www.java2s.com/Code/Java/XML/JavaDOMeditCopyaNodefromOneParseTreeintoAnother.htm)를 사용하여 보겠습니다. – LarsH

    +0

    감사합니다 ... 나를 할 것입니다! – Larry

    1
    /title/comment[@id] 
    

    id 속성을 갖는 모든 설명 요소를 검색합니다.

    +0

    내 xpath 표현식이'/ title/comment/data/text()'라고한다면, 여기에 원하는 하위 트리가 있습니다 : 이것은 하나의 코멘트 부분입니다', 등등 ... – Larry

    1

    XPath 표현식은 사례 속성 노드에서 노드를 반환합니다. 호출하는 Java 코드는 이러한 노드에서 좋아하는 모든 작업을 수행 할 수 있습니다 (예 : 부모 또는 해당 부모의 하위 항목으로 이동).

    하지만 XPath에서 절반, Java에서 절반을 수행하는 대신 XSLT 또는 XQuery에서 모든 작업을 수행하는 것이 좋습니다.

    관련 문제