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

时间:2015-06-09 07:23:16

标签: xpath xquery basex

为了学习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

2 个答案:

答案 0 :(得分:1)

您无法将该部分的表达式分开,请将following-sibling::h2视为一个单元。您可以改为:

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

答案 1 :(得分:1)

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

因此定义和引用表达式本身都需要是有效的表达式。如果您想将所有后续兄弟元素的列表存储在变量中,然后再过滤h2元素,则需要类似

的元素。
let $x := doc("test.xq")//h2/following-sibling::* return  $x[self::h2]