2011-03-16 5 views
1

을 가지고 두 아이들과 부모를 선택합니다.XPATH 표현 내가이 유사한 XML 구조를 가지고 어린이

<ElementA> 개의 노드 중 <ElementB>/Header/ElementA/ElementB/following-sibling::ElementB 인 노드를 선택할 수 있습니다. 노드 <ElementB>을 포함하는 <ElementA> 노드를 선택할 수 있습니다. <ElementC>이 포함 된 노드는 /Header/ElementA/ElementB[ElementC]입니다.

하지만 어떻게 내가 다른 <ElementC>을 포함하는 다른 <ElementB> 뒤에 <ElementC>을 포함하는 <ElementB>를 포함 <ElementA> 노드를 선택 않습니다. 이런 식으로 뭔가 : 난 그냥 내 자신의 질문에 대답했을 수

<Header> 
    <ElementA> 
     <ElementB> 
      <ElementC/> 
      <ElementC/> 
     </ElementB> 
     <ElementB> 
      <ElementC/> 
      <ElementC/> 
     </ElementB> 
    </ElementA> 
</Header> 
+0

@ John-Saunders : 아마도 존경심을 표시하고 가장 좋은 답변을 선택할 수 있습니다 (분명히 @ Robert-Rossney가 생각하는 것 같습니다). –

+1

@ Dimitre : 이해 한 후에 대답을 수락하면 가장 존경심을 나타냅니다. 나는 가깝고 나는 잊지 않았다. –

답변

9

참고 :

+0

아주 좋습니다. 하나의 말 : "ElementC [2]"에 술어가 필요하지 않은 것은 아마도 "ElementC"가 두 개 이상 존재한다고 명시하지 않았기 때문입니다. –

+0

아, 맞아. 나는 그것을 고쳐 줄 것이다. –

+1

+1 우수 답변입니다. 적어도 ** ** 두 개가있는 경우 초가 있습니다. 이 모든 ** 근접 수 ** 카운트에 복용하지 마십시오. –

3

:

/Header/ElementA[ElementB[ElementC]/following-sibling::ElementB[ElementC]] 

가 작동하는 것 같다. 이전에 작동하지 않는 이유는 내 문서가 모두 88,000 줄에 해당 패턴이 나타나지 않았기 때문입니다. 이것은 아마 XPATH 표현식의 버그가 아니라 그것을 생성하는 코드의 버그를 나타냅니다. 당신이 명시 적으로-형제 축을 검색하지 않아도

/Header/ElementA[ElementB[following-sibling::ElementB/ElementC]/ElementC] 
+0

@ John-Saunders : 아마도 존경심을 표시하고 가장 좋은 답변을 선택할 수 있습니다 (분명히 @ Robert-Rossney가 생각한 것 같습니다). –

2

중첩 술어는 일을 가져옵니다. 이 두 패턴은 같은 결과를 반환합니다

foo[bar/following-sibling::bar] 

foo[bar[2]] 

그래서 당신의 패턴이 간단 할 수 있습니다와 같은 : 두 개 이상의이 ElementA 요소를 찾을 수

/Header/ElementA[ElementB[ElementC][2]] 

ElementB 자녀가 있으며 각 자녀의 자녀는 ElementC입니다.