2016-11-29 52 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后裔。