XQuery:在变量的上下文中选择一个节点

问题描述 投票:0回答:2

为了学习 XQuery,我尝试在 BaseX 中运行以下 XQuery 命令

let $x := doc("test.xq")//h2/following-sibling return  $x::h2

我想它应该等同于

let $x := doc("test.xq")//h2/following-sibling::h2 return  $x

但是它给出了以下错误并且在第二个命令有效时不起作用

Error:
Stopped at D:/Program Files/BaseX/data/test.xq, 1/66:
[XPST0003] Unexpected end of query: '::h2'.

一般来说,如何在变量提供的上下文中选择一些节点(

h2
)(
$x := doc("test.xq")//h2/following-sibling

xpath xquery basex
2个回答
1
投票

恐怕这不是变量的工作方式。看起来您正在尝试将变量声明视为一种“宏”,并期望在引用变量时替换其文本定义,但实际上 XQuery 变量更像是 C 或 Java 中的局部变量 -评估定义表达式以给出一个值或序列,当您引用该变量时,您将获得该值。

所以定义和引用表达式都必须是有效的表达式。如果您想将所有后续同级元素的列表存储在变量中,然后稍后仅过滤

h2
元素,您需要像

这样的东西
let $x := doc("test.xq")//h2/following-sibling::* return  $x[self::h2]

1
投票

那部分的表达不能分开,看

following-sibling::h2
为一个单位。您可以改为执行以下操作:

let $x := doc("test.xq")//h2 return  $x/following-sibling::h2
© www.soinside.com 2019 - 2024. All rights reserved.