2012-11-01 2 views
-2

에서 특정 노드의 형제의 모든 종류를 얻을 수있는 방법이 XPath는 2.0XPath는 2.0

축은 "다음 - 형제"만 지원을 특정 노드의 형제의 모든 종류를 얻을 수있는 방법이 있습니다 형제 형제도 마찬가지야.

예는 :

<node> 
<b name="bold">abc</b> 
<div>gef</div> 
</node> 

나는 <b name="bold">의 모든 형제를 선택합니다.

+2

Shivam Agrawal, "Xpath 2.0에서 특정 노드의 모든 형제 *를 가져올 수있는 방법이 있습니까?"라고 말하면서 "나는 ."이 두 진술은 모순적이며 결과적으로 문제는 거의 없다. 질문을 편집하고 문제에 대한 명확한 설명과 정확하게 선택해야 할 내용을 제공한다. 또한 질문의 제목을 변경한다. –

+0

누락 된 형제 유형은 무엇입니까? 어떤 XPath 쿼리를 시도 했습니까 –

답변

1

은 확실 질문을 이해하지만 방법에 대한 다음 <b name="bold">abc</b> 요소의 이전의 모든 형제 자매를 얻을 것이다

//*[preceding-sibling::b] 

. *은 모든 유형의 요소를 선택합니다.

//*[preceding-sibling::b or following-sibling::b] 

그리고 당신은 더 구체적하려는 경우가 b 요소 선택 방법 :

//*[preceding-sibling::b[@name="bold"]] 
+0

이 Xpath 이외의 div 태그를 선택하고 싶습니다 '// b [@name = 'bold'] // following-sibling :: div [1] ' –

+0

무슨 뜻인지 모르겠지만 xpath는 div가 아닌 모든 * 형제를 선택합니다 –

+0

그래서 모든 div를 선택하려고합니다. 형제 자매 * 다른 * 형제 자매보다 먼저? –

2
Is there any method to get any type of sibling of a particular node in Xpath 2.0 

The axes following-sibling only supports for the same type of siblings. 

사용을 :

당신이 모든 형제 자매를 원하는 경우에

following-sibling::node() 

요소, 텍스트 노드, 처리 명령 노드 및 주석 노드의 모든 형제 노드를 선택합니다. 여기

완전한 XSLT 인 - 대조 : XPath 식을 OFF (인가

<node> 
    <b name="bold">abc</b> 
    <div>gef</div> 
</node> 

이 변환이 제공된 XML 문서에 적용

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:for-each select="/*/b[@name='bold']/following-sibling::node()"> 
     "<xsl:copy-of select="."/>" 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

원하는 요소) 및 선택된 모든 세 노드가 출력에 복사됩니다. :

 " 
    " 

     "<div>gef</div>" 

     " 
" 

우리가 볼 수 있듯이, 모든 형제 노드를 선택 - 공백 전용 텍스트 노드, div 요소와 다른 공백 전용 텍스트 노드를.

주의 마십시오 : 이것은 XPath는 1.0 표현 내가 XPath는 2.0 형제를 선택하는 새로운 기능을 추가 생각하지 않습니다 XPath는 1.0에 이미있는 것보다.

"형제"는 XPath에서 "형제"의 의미와 다른 의미가있는 경우 정확하게 의미를 정의해야합니다.