3

假设我们有这样一个结构(b每个a中的数量未知):

<a>
    <b/>
    <b/>
    <b/>
</a>
<a>
    <b/>
    <b/>
    <b/>
</a>

我们如何在 xpath 中表达以下短语:“top 4 b elements nested into a”

a/b[position() <= 4]出于显而易见的原因,返回所有 6 个元素。

我如何将其限制为 4?

我发现这(a/b)[position() <= 4]应该可行,但似乎是xpath 2.0. 1.0对版本有什么想法吗?

4

2 回答 2

4

<b>不漂亮,但这会检查文档中前面有多少s。

a/b[count(preceding::b) < 4]

这并不完美。如果有其他<b>s 不在<a>s 之内,它将失败。例如:

<b>oops</b>
<a>
    <b/>
    <b/>
    <b/>
</a>
<a>
    <b/>
    <b/>
    <b/>
</a>

这个不会被<b>oops</b>元素绊倒。

a/b[count(preceding::b/parent::a) < 4]
于 2013-07-02T22:35:05.587 回答
2

为什么说

(a/b)[position() <= 4] 应该可以工作,但似乎是 xpath 2.0

? 这是完全合法的 XPath 1.0,实际上是用于此目的的常用习惯用法。我刚刚对其进行了测试以确认它已被接受并且可以正常工作。

它也可能比使用 更有效count(preceding::b),具体取决于 XPath 处理器。

于 2013-07-03T13:47:04.500 回答