【问题标题】:BaseX XQuery error: root(): no context value boundBaseX XQuery 错误:root():没有上下文值绑定
【发布时间】:2015-06-09 15:02:05
【问题描述】:

我正在尝试在 BaseX 中运行以下 XQuery 表达式来提取两个后续标题之间的元素。 (作为文章部分)。

xquery for $x in doc("test.xq")//h2, 
$y in $x/following-sibling::h2[1]  
return //*[$x/following::* and $y/preceding::*]

但它给出了错误

Error:
Stopped at D:/Program Files/BaseX/data/test.xq, 1/74:
[XPDY0002] root(): no context value bound.

我的意思是如果$x 是标题并且$y 是$x 之后的第一个标题,那么选择$x/following::*$y/preceding::* 的通用文本

但是我不确定我的表达式是否有效,但我的问题是如何执行我的预期查询而不会出错?

如果你也有适合我需要的表达方式,欢迎。

【问题讨论】:

标签: xpath xquery grouping basex


【解决方案1】:

[...] 提取两个连续标题之间的元素 [...]

你需要更多类似的东西:

for $x in doc("test.xq")//h2
return $x/following-sibling::*[preceding-sibling::h2[1] is $x]

但它本身不会为您提供任何有用的信息,因为 XPath 和 XQuery 数据模型只有平面序列,而不是“多维数组”。当您有一个为每个“迭代”返回值序列的for 时,for 表达式的整体结果是所有结果序列的串联,因此如上面所写,此表达式将简单地返回所有元素在单个平面列表中的每个“部分”中。如果要按部分对元素进行分组,则需要为每个组构造一个新的 XML 元素

for $x in doc("test.xq")//h2
return
  <section>{$x/following-sibling::*[preceding-sibling::h2[1] is $x]}</section>

【讨论】:

  • 谢谢!你的答案和@LarsH 是互补的,你可能想在你的答案中包含它的某些部分或解决他的答案。
  • 在我在这里询问错误来源之前,我有一个类似的问题stackoverflow.com/questions/30710968/…,其中需要其他部分的条件,请您也检查一下,对不起,如果我看起来很幼稚
【解决方案2】:

错误(如记录的here)来自此表达式:

//*[$x/following::* and $y/preceding::*]

// 开头。缩写//代表/descendant-or-self::node()/,当然以/开头。 XPath 标准says

A / 自己选择包含文档的根节点 上下文节点。如果后面是相对位置路径,则 位置路径选择将由 相对于 文档根节点的相对位置路径 包含上下文节点

但是从您向我们展示的内容来看,没有任何迹象表明您已经建立了上下文节点。所以 XPath 没有任何方法可以知道哪个文档包含上下文节点。这就是错误消息所指的内容

root(): no context value bound

要修复错误,您可以在 // 前面加上显式 doc(...) 或任何其他显式方式来设置上下文:

doc("test.xq")//*[$x/following::* and $y/preceding::*]

root($x)//*[$x/following::* and $y/preceding::*]

这应该可以消除错误,但正如 Ian Roberts 所写,它不会给您想要的结果。请参阅他的答案。

【讨论】:

  • 谢谢。你的意思是应该指定文档,如果查询不是通过变量追溯到根?你的回答和伊恩是互补的,回答问题,不知道该接受哪个。
  • Ahmad,如果没有上下文节点,则不能使用以/ 开头的 XPath 表达式。你可以使用doc(...)/...,或root($x)/...,或类似的东西。你问了两个问题;我回答了第一个,伊恩回答了第二个。我怀疑伊恩的回答对你来说更实用。如果你接受他,我不会反对。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2016-04-30
  • 2014-03-26
  • 2023-03-18
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多