在XPath 1.0中,当我根据当前所在的节点引用XML中其他地方的节点时,有一个函数current((会派上用场。我的 XML 具有这样的结构:
<root>
<book>
<chapter>
<section>
<para>
<image id="1">1.png</image>
</para>
</section>
</chapter>
</book>
<objects>
<Object>
<ID>1</ID>
</Object>
</objects>
</root>
当我处理书中的参数节点时,我有时会使用像这样的 XPath 表达式来查找对象节点中的信息:
Object[ID=current()/descendant::image[1]/@id]
当我将解析器切换到 XPath 2.0 时,此表达式给出错误(函数电流不可用(。
我已经做了一些搜索,但无法找到此功能的直接替代品。有吗?
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]
current()
函数仅在 XSLT(所有版本(中可用。它在 XPath(任何版本(中都不可用。
请参阅规范"附加功能"部分中的current()
功能说明。