2014-02-24 6 views
1

그래서 XML 통합 문서에서 연습을하고 문서의 모든 요소 모음에서 주어진 요소의 다음 형제를 가져올 수 있어야합니다. 예를 들어 다음과 같이 전체 문서에 모두 NODE2 요소 세트를 가져와야하며 그 위치에서 'attrib' 속성이 $var ...다음 형제 속성을 가져 오는 방법은 무엇입니까?

인 동등한 첫 번째 동위와 NODE2 요소를 선택해야합니다.
<ROOT> 
    <SUBROOT> 
    <NODE1> 
     <NODE2 attrib="data1"> 
     <NODE2 attrib="data2"> 
    </NODE1> 
    <NODE1> 
     <NODE2 attrib="data3"> 
     <NODE2 attrib="data4"> 
    </NODE1> 
    <NODE1> 
     <NODE2 attrib="data5"> 
     <NODE2 attrib="data6"> 
    </NODE1> 
    </SUBROOT> 
</ROOT> 

이것은 내가 지금까지 가지고 있지만 작동하지 않습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

<xsl:value-of select=".//NODE2[following-sibling::@name[1]=$var and position()=1]" 
/> 

답변

1
NODE2

모든 요소의 집합 또는 descendent-or-self::NODE2//NODE2이다. "."

코드에 쓴대로 다음 형제가 없습니다 (name). 다음 형제가 NODE2 일 수 있으므로 following-sibling:node() 또는 following-sibling:NODE2으로 작성할 수 있습니다 (모든 형제 노드는 NODE2이므로).

이제 following-sibling이되었으므로 속성을 테스트하기 위해 조건자를 추가 할 수 있습니다. name이 아니라 attrib (코드에 따라). attribute::attrib 또는 @attrib을 사용할 수 있습니다. 그런 다음 술어에 @attrib = $var이 될 수 있습니다.

두 번째 조건자를 and로 또는 다른 대괄호 쌍으로 연결할 수 있습니다. 두 번째 조건자는 컨텍스트를 변경하지 않기 때문입니다. [pred1 and pred2] 또는 [pred1][pred2] 일 수 있습니다. 따라서 element[1][@attrib=$var] 또는 element[position() = 1 and @attrib = $var]이라고 말할 수 있습니다.

나는 올바른 방향으로 가야한다고 생각합니다.

관련 문제