什么XQuery表达式将返回每个找到的节点的XPath?

时间:2012-02-04 16:23:46

标签: xml xpath xquery

我正在寻找一个XQuery示例,它返回找到的每个节点的xpath。所以例如,我没有得到每个找到的节点的text(),而是想得到path() - 但是这个函数似乎不存在: - )

我现在看到XPath 3.0规范定义了一个path()函数,可以实现我想要的,但显然这是3.0的新功能

http://www.w3.org/TR/2011/WD-xpath-functions-30-20111213/#func-path

1 个答案:

答案 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]