2016-11-29 3 views
1

のIは、XMLSXPathは関係なく、深さ

ケース1

<A> 
    <B> 
    <TAB name="tab1a"> 
     <FIELD name="myField"> 
     </FIELD> 
    </TAB> 
    </B> 
</A> 

ケース2

<A> 
    <B> 
    <TAB name="tab1b"> 
    <C> 
     <D> 
     <FIELD name="myField"> 
     </FIELD> 
     </D> 
    </C> 
    </TAB> 
    </B> 
</A> 

ケース3

を有します
<A> 
    <TAB name="tab1c"> 
    <B> 
     <C> 
     <D> 
      <FIELD name="myField"> 
      </FIELD> 
      </D> 
     </C> 
     </B> 
    </TAB> 
</A> 

myFieldというFIELDを含むTABの名前を取得する必要があります。

私はこれまで

//Tab[Field[@name="myField"]]/@name 

//Field[@name="myField"]/parent::*/parent::*/parent::*/@name. 

を試みたが、私は1つの汎用クエリでで行いたいと思います。

答えて

1

このXPathの、

//TAB[.//FIELD/@name='myField']/@name 

"myField"@name有する子孫FIELD素子を有するTAB要素の@name値を返します。要求されるごとに、個々のケースごとに個別に機能します。

あなたは、単一のルート要素で、あなたの例すべてをラップした場合、それらすべてが予選FIELD子孫が含まれているため、それはTAB/@name値の全て、

tab1a 
tab1b 
tab1c 

を返します。

関連する問題