具有特定后代元素的父元素的XPath,无论深度如何

时间:2016-11-29 13:46:21

标签: xml xpath

我有这样的XML

案例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的名称,其中包含名为FIELD的{​​{1}}。

到目前为止我已经尝试了

myField

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

但我想在一个通用查询中进行。

1 个答案:

答案 0 :(得分:1)

这个XPath,

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

将返回@name元素的TABFIELD元素,其中@name元素"myField" TAB/@name tab1a tab1b tab1c 。它可以根据要求单独为您的每个案例工作。

如果要将所有案例包装在单个根元素中,它将返回所有FIELD值,

ntext

因为它们都包含符合条件的nvarchar(max)后代。