xml - XQuery 同时获取和插入

标签 xml xpath xquery basex xquery-update

我正在检索数据并将其插入到另一个文件中。但插入的数据是没有顺序的。以下是我想要实现的目标的示例。

let $n := <N>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
<n>Orange</n>
<n>Pineapple</n>
<n>Apple</n>
<n>Lemon</n>
<n>Chickoo</n>
<n>Banana</n>
</N>

for $x in distinct-values($n/n)
order by $x 
return 
    insert node  <n>{$x}</n> into doc('fruits')/fruit

fruits 的输出如下 -

    <fruit>
            <n>Lemon</n>
            <n>Chickoo</n>
            <n>Banana</n>
            <n>Orange</n>
            <n>Pineapple</n>
            <n>Apple</n>
    </fruit>

虽然在检索时提到过,但它没有订购......!!!

最佳答案

这是 BaseX 如何评估 order by FLWOR 子句的错误,该错误现已记录在 GitHub bug tracker 中。 。 return 子句是在排序之前而不是后文进行评估,因此以错误的顺序添加更新。

解决方法是在另一个 FLWOR 表达式中进行排序:

for $x in
  for $d in distinct-values($n/n)
  order by $d
  return $d
order by $x 
return 
    insert node <n>{$x}</n> into doc('fruits')/fruit

另一个(可能更优雅)的解决方案是使用插入节点,只需评估一次:

insert nodes
  for $x in distinct-values($n/n)
  order by $x 
  return <n>{$x}</n>
into doc('fruits')/fruit

关于xml - XQuery 同时获取和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373044/

相关文章:

xslt - 在 XSLT : for-each-group 中实现动态 xpath

javascript - 如何通过单击 html 元素获取 xpath

sql-server - OPENXML 未返回预期结果

gradle - 使用xquery的ML Gradle task.Server.Eval.Task设置变量

sql - 在 SQL Server 中将 XML 转换为 XML 数据类型

java - 停止从依赖项向控制台显示记录器输出

java - 如何使用动态xpath进行谷歌搜索?

user-interface - 带 GUI 的 MarkLogic 内容泵 (MLCP)

javascript - 新的 XMLHttpRequest 无法在 Firefox 上运行

android - 如何使用 xml 按钮以编程方式禁用按钮