XQuery: Select 变量上下文中的节点
XQuery: Select a node in the context of a varaible
为了学习 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'.
一般来说,如何在变量 ($x := doc("test.xq")//h2/following-sibling
)
提供的上下文中 select 一些节点 (h2
)
那部分的表达式不能分开,请将following-sibling::h2
视为一个单元。您可以改为执行以下操作:
let $x := doc("test.xq")//h2 return $x/following-sibling::h2
恐怕变量不是这样工作的。看起来您正在尝试将变量声明视为一种 "macro" 并期望在引用变量时替换其文本定义,但实际上 XQuery 变量更像是 C 或 Java - 计算定义表达式以给出一个值或序列,当您引用该变量时,您将取回该值。
因此,定义表达式和引用表达式本身都必须是有效的表达式。如果您想将所有后续同级元素的列表存储在变量中,然后稍后仅过滤 h2
元素,您需要像
let $x := doc("test.xq")//h2/following-sibling::* return $x[self::h2]
为了学习 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'.
一般来说,如何在变量 ($x := doc("test.xq")//h2/following-sibling
)
h2
)
那部分的表达式不能分开,请将following-sibling::h2
视为一个单元。您可以改为执行以下操作:
let $x := doc("test.xq")//h2 return $x/following-sibling::h2
恐怕变量不是这样工作的。看起来您正在尝试将变量声明视为一种 "macro" 并期望在引用变量时替换其文本定义,但实际上 XQuery 变量更像是 C 或 Java - 计算定义表达式以给出一个值或序列,当您引用该变量时,您将取回该值。
因此,定义表达式和引用表达式本身都必须是有效的表达式。如果您想将所有后续同级元素的列表存储在变量中,然后稍后仅过滤 h2
元素,您需要像
let $x := doc("test.xq")//h2/following-sibling::* return $x[self::h2]