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

问题描述:

我正在寻找一个XQuery的例子,它返回找到的每个节点的xpath。因此,例如,而不是获取每个找到的节点的文本()我想获得路径() - 但该函数似乎并不存在:-)什么XQuery表达式将返回每个找到的节点的XPath?

我现在看到XPath 3.0规范定义了一个会做我想做的,但路径()函数显然,这是一个新的3.0

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

+1

那么没有什么像一个节点的“xpath”,所以你首先需要解释一下你想为节点生成什么样的路径。 – 2012-02-04 16:38:40

正如马丁Honnen评论,XPath表达式选择特定的节点不是唯一的。例如,以下文献

<x> 
    <y id="1"/> 
    <y id="2"/> 
</x> 

在第二y元件可以被选择(非排他地)由:

//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]

+2

如果您想使用路径来查找使用XPath处理器的节点,那么您还需要仔细考虑名称空间,因为通常路径表达式依赖于外部指定的名称空间声明。 – 2012-02-04 18:56:08

+0

谢谢。我会看看FunctX库。 – matisse 2012-02-04 19:43:27

+0

我查看了FunctX库并使用了functx:path-to-node-with-pos(取决于functx:节点索引)适用于我想要的功能。 – matisse 2012-02-04 19:49:39