XQuery获取和插入相同的时间

时间:2013-01-17 06:02:31

标签: 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>

虽然在检索时提到了...... !!!

2 个答案:

答案 0 :(得分:2)

这是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,只需要评估一次:

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

答案 1 :(得分:0)

这对我来说感觉像个错误。规范说:

如果单个插入表达式插入了多个节点,则它们的顺序会保留源表达式的节点顺序。

这不完全清楚,但我认为这意味着您有权期望对结果进行适当的排序。

您使用的是什么XQuery Update实现?