XPath 2.0:如何 select 当前节点 - current() 不再可用

XPath 2.0: how to select the current node - current() no longer available

在 XPath 1.0 中,有一个函数 current() 当我根据我正在访问的节点引用 XML 中其他地方的节点时,它会派上用场在此刻。 我的 XML 有这样的结构:

<root>
    <book>
        <chapter>
            <section>
                <para>
                    <image id="1">1.png</image>
                </para>
            </section>
        </chapter>
    </book>
    <objects>
        <Object>
            <ID>1</ID>
        </Object>
    </objects>
</root>

当我在 book 中处理 para 节点时,我有时会使用像这样的 XPath 表达式来查找对象节点中的信息:

Object[ID=current()/descendant::image[1]/@id]

当我将解析器切换到 XPath 2.0 时,此表达式会出错(当前函数不可用)。

我进行了一些搜索,但未能找到该功能的直接替代品。有吗?

current() 函数仅在 XSLT(所有版本)中可用。它在 XPath(任何版本)中不可用。

请参阅规范的 current() function description in the "Additional Functions" 部分。

current() 函数是在 XSLT 中定义的,而不是在 XPath 中定义的。它在 XSLT 1.0、2.0 和 3.0 样式表中的 XPath 表达式中可用,但在独立的 XPath 中不可用(在任何版本中,除了可能作为不一致的扩展)。

在 XPath 2.0 中有一个使用变量的解决方法:

Object[ID=current()/descendant::image[1]/@id]

变成

for $x in descendant::image[1]/@id return Object[ID=$x]