我正在寻找一个XQuery示例,它返回找到的每个节点的xpath。所以例如,我没有得到每个找到的节点的text(),而是想得到path() - 但是这个函数似乎不存在: - )
我现在看到XPath 3.0规范定义了一个path()函数,可以实现我想要的,但显然这是3.0的新功能
http://www.w3.org/TR/2011/WD-xpath-functions-30-20111213/#func-path
答案 0 :(得分:3)
正如Martin Honnen评论的那样,选择特定节点的XPath表达式并不是唯一的。例如,以下文档中的第二个y
元素
<x>
<y id="1"/>
<y id="2"/>
</x>
可以通过以下方式选择(非专有)
//y[2],
/x/y[2],
//*[@id = '2'],
/x/*[position() = last()]
如果您只想让某些 XPath表达式选择节点,FunctX XQuery Function Library包含两个执行此操作的函数:
functx:path-to-node 返回一个XPath表达式,选择具有相同名称的所有节点 祖先将名称命名为您为其评估的节点。
在我们的示例中,它会为x/y
个元素返回y
(请注意缺少的前导斜杠)。
functx:path-to-node-with-pos还包括文档中每个祖先的位置,从而只选择您传入的节点。
在示例中,第一个y
元素将生成x/y[1]
,第二个元素生成x/y[2]
。