首页 > 解决方案 > 使用 xquery 按本地名称对树进行排序

问题描述

I want the below XML
<a>
<z>
   <e>
   <b>
<c>

Sorted as such    
<a>
<c>
<z>
   <b>
   <e>

我使用本地名称作为 order by。我相信我需要递归调用函数。我相信我需要使用元素构造函数重新创建元素。

我现在不关心属性。片段:

let $child-elements := $elements/*
return
    if ($child-elements) then
        myfunctx:sort($child-elements, $current-element)
    else 
        element { xs:Qname ($local-name)} , {$current-element, $result) ???

标签: xquery

解决方案


declare function local:sort($container){
  element {$container/name()} {
    for $child in $container/*
    order by $child/local-name()
    return local:sort($child)
  }
};

let $doc := <doc>
  <a/>
  <z>
    <e/>
    <b/>
  </z>
  <c/>
</doc>
return local:sort($doc)

推荐阅读