如何使用XPath获取与条件对应的TOP N元素

时间:2011-05-05 14:27:41

标签: xml xpath top-n

我有这样的XML

<root>
<el id="1" value="3"/>
<el id="2" value="3"/>
<el id="3" value="4"/>
<el id="4" value="4"/>
<el id="5" value="4"/>
<el id="6" value="4"/>
</root>

我想要一个xpath(我在c#上下文而不是xslt模板)获取值为4的第一个元素,即

<el id="3" value="4"/>
<el id="4" value="4"/>

with /root/el[position() <= 2 and @value=4]我得到0个元素,因为position()基于父节点而不是当前子集。

我可以在c#中执行此操作,但是当我只需要20时,加载1200节点似乎没用。

由于

2 个答案:

答案 0 :(得分:4)

以下适用于我的XSLT脚本;

  <xsl:template match="/">
    <xsl:apply-templates select="/root/el[@value=4][position()&lt;=2]" />
  </xsl:template>

结果是id 3和4,所以XPATH /root/el[@value=4][position()&lt;=2]应该适合你。

答案 1 :(得分:2)

@rsp的回答是正确的,但我想补充说明。 [cond1 and cond2]等同于[cond1][cond2]并不总是正确的。你需要第二种形式。

你的表达:

/root/el[position() <= 2 and @value=4]

...选择el属性等于value且位置小于或等于4的所有2元素。您的文档中没有这样的元素。

你想:

/root/el[@value=4][position() <= 2]

...首先选择el属性等于value 的所有4元素,然后根据需要按位置过滤