如何用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 (我在 ac# 上下文中,而不是 xslt 模板)获取值为 4 的第 2 个元素,即
<el id="3" value="4"/>
<el id="4" value="4"/>
使用 /root/el[position() < ;= 2 and @value=4]
我会得到0个元素,因为position()基于父节点,而不是当前子集。
我可以在 C# 中做到这一点,但当我只需要 20 个节点时,加载 1200 个节点似乎毫无用处。
谢谢
I have an XML like this
<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>
I'd like with one xpath (I'm in a c# context not an xslt template) get the 2 first element with a value of 4 ie
<el id="3" value="4"/>
<el id="4" value="4"/>
with /root/el[position() <= 2 and @value=4]
I'd get 0 element because position() is based on the parent node, not the current subset.
I can do this in c# but it seems useless to load 1200 node when I only need 20.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下内容在 XSLT 脚本中适用于我;
结果是 id 3 和 4,因此 XPATH
/root/el[@value=4][position()<=2]
应该适合您。The following works for me in an XSLT script;
The result is id's 3 and 4, so the XPATH
/root/el[@value=4][position()<=2]
should work for you.@rsp 的答案是正确的,但我想添加一个解释。
[cond1 和 cond2]
并不总是等同于[cond1][cond2]
。您需要第二种形式。您的表达式:
...选择
value
属性等于4
且位置小于或等于的所有
。您的文档中没有此类元素。el
元素>2您想要:
...首先选择
value
属性等于4
的所有el
元素,然后根据需要按位置过滤列表。The answer by @rsp is correct, but I'd like to add an explanation. It's not always true that
[cond1 and cond2]
is equivalent to[cond1][cond2]
. You need the second form.Your expression:
...selects all
el
elements that have avalue
attribute equal to4
and whose position is less than or equal to2
. There are no such elements in your document.You want:
...which first selects all
el
elements that have avalue
attribute equal to4
and then filters that list by position, as desired.