2016-11-29 111 views
1

的我有這樣個XML的XPath與某些派生元素的父元素,而不管深度

案例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> 

我需要取名爲TAB,其中包含名爲myFieldFIELD

我到目前爲止

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

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

試過,但我想這樣做在一個通用的查詢。

回答

1

此XPath,

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

將返回具有的"myField"@name後代FIELD元件TAB元件的@name值。根據要求,它將針對您的每個案例分別開展工作。

如果你來包裝所有的情況下,在一個單一的根元素,它會返回所有TAB/@name值,

tab1a 
tab1b 
tab1c 

,因爲它們都含有預選賽FIELD後裔。