假设我们有这样的结构(每个b
中a
的数量未知):
<a>
<b/>
<b/>
<b/>
</a>
<a>
<b/>
<b/>
<b/>
</a>
我们如何在xpath中表达以下短语:&#34; top 4 b元素嵌套在&#34;
a/b[position() <= 4]
由于显而易见的原因返回所有6个元素。
我如何将其限制为4?
我发现(a/b)[position() <= 4]
应该有用,但似乎是xpath 2.0
。有关1.0
版本的任何想法吗?
答案 0 :(得分:4)
不漂亮,但这会检查文档中前面有多少<b>
。
a/b[count(preceding::b) < 4]
这不完美。如果<b>
内没有其他<a>
,则会失败。例如:
<b>oops</b>
<a>
<b/>
<b/>
<b/>
</a>
<a>
<b/>
<b/>
<b/>
</a>
这个元素不会被<b>oops</b>
元素绊倒。
a/b[count(preceding::b/parent::a) < 4]
答案 1 :(得分:2)
为什么这么说
(a / b)[position()&lt; = 4]应该有效,但似乎是xpath 2.0
?这是完全合法的XPath 1.0,实际上是这个目的的常用习惯用法。我刚测试它以确认它已被接受并正常工作。
它可能比使用count(preceding::b)
更有效,具体取决于XPath处理器。