对于这个例子,我想从每个(真正的 xml 可能嵌套更深)中获取第一个b
元素。t
不幸的是,我仅限于xpath 1.0
. 我最初的想法是这样的,//t//b[position()=1]
但我无法让它发挥作用。
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
对于这个例子,我想从每个(真正的 xml 可能嵌套更深)中获取第一个b
元素。t
不幸的是,我仅限于xpath 1.0
. 我最初的想法是这样的,//t//b[position()=1]
但我无法让它发挥作用。
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
这几乎是对的。首先注意谓词[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 的 1和3。如果你只想要b
每个里面的第一个,t
那么你需要
//t/descendant::b[1]
鉴于上面的示例 XML,这将只返回<b attr="1"/>
您通常可以将.//x
其视为等效,descendant::x
但这是显示两者之间细微区别的边缘情况之一......