选择前N个元素

时间:2013-07-02 22:22:06

标签: xml xpath xpath-1.0

假设我们有这样的结构(每个ba的数量未知):

<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版本的任何想法吗?

2 个答案:

答案 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处理器。