1

对于这个例子,我想从每个(真正的 xml 可能嵌套更深)中获取第一个b元素。t不幸的是,我仅限于xpath 1.0. 我最初的想法是这样的,//t//b[position()=1]但我无法让它发挥作用。

<t>
 <a>
   <b/>
   <b/>
   <b/>
 </a>
</t>
<t>
 <a>
   <b/>
   <b/>
   <b/>
 </a>
</t>
4

1 回答 1

1

这几乎是对的。首先注意谓词[position()=1]等同于 simple [1],从现在开始我将使用更短的形式。现在根据定义

//t//b[1]

是简写

//t/descendant-or-self::node()/child::b[1]

所以它会给你所有b嵌套在 a 内的元素,并且是它们各自父元素t的第一个子元素。b因此给出

<t>
  <a>
    <b attr="1"/>
    <b attr="2"/>
  </a>
  <a>
    <b attr="3"/>
  </a>
</t>

你会得到 b 的 13。如果你只想要b每个里面的第一个,t那么你需要

//t/descendant::b[1]

鉴于上面的示例 XML,这将只返回<b attr="1"/>

您通常可以将.//x其视为等效,descendant::x但这是显示两者之间细微区别的边缘情况之一......

于 2013-01-14T19:11:36.643 回答