【问题标题】:XQuery to fetch and insert same timeXQuery 同时获取和插入
【发布时间】:2013-01-17 06:02:31
【问题描述】:

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

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>

它没有排序,虽然在检索时提到... !!!

【问题讨论】:

    标签: xml xpath xquery basex xquery-update


    【解决方案1】:

    这是 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
    

    【讨论】:

      【解决方案2】:

      这对我来说就像一个错误。规范说:

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

      这不是很清楚,但我认为这意味着您有权期望结果得到正确排序。

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

      【讨论】:

      • 这是BaseX中的一个bug,我在GitHub上提交了bug report
      猜你喜欢
      • 2015-08-31
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多