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

时间:2017-03-23 11:40:13

标签: xpath xpath-2.0

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

我已经做了一些搜索,但未能找到这个功能的直接替代品。有吗?

2 个答案:

答案 0 :(得分:3)

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

请参阅&#34; current()&#34;中的Additional Functions功能说明。规范部分。

答案 1 :(得分:2)

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]