【问题标题】:XPath 2.0: how to select the current node - current() no longer availableXPath 2.0:如何选择当前节点 - current() 不再可用
【发布时间】:2017-03-23 11:40:12
【问题描述】:

在 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 时,此表达式给出错误(函数当前不可用)。

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

【问题讨论】:

    标签: xpath xpath-2.0


    【解决方案1】:

    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]
    

    【讨论】:

    • 我在 Oxygen 15.0 中使用 XPath/XQuery 构建器。当我将其设置为使用 XPath 1.0 时,它会接受查询,当我将其设置为使用 XPath 2.0 时,会出现错误。我会再做一些测试。
    • 那就是氧气问题。
    • @Hobbes - 我也能够在 oXygen 16.1 中重现这种行为。也许尝试搜索/发布oXygen forum
    【解决方案2】:

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

    请参阅规范“Additional Functions”部分中的current() 函数说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2013-11-28
      相关资源
      最近更新 更多