SQL Server : FOR XML 按属性排序控制 [英] SQL Server : FOR XML sorting control by attribute

查看:52
本文介绍了SQL Server : FOR XML 按属性排序控制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从 SQL Server 查询生成一个 XML 文件.

I am generating a XML file from a SQL Server query.

我在排序元素方面遇到一些问题.

I have some problem about sorting elements issues.

例如,有如下简单代码.

For example, there is simple code as below.

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>

正如你所看到的,树和树顺序是不同的元素,我想按属性排序

As you can see tree and tree-order are different elements and I want to sort by attributes as

<test>
    <tree abc="123"/>
    <tree-order abc="456"/>
    <tree abc="789"/>
</test>

像这样.

有人有解决这个问题的好主意吗?

Anyone has good idea to solve this problem?

谢谢.

对不起,我有以下详细问题

Sorry I have detail question as below

AS 是

 <Main>

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>

</Main>

成为:

<Main>

<test>
    <tree abc="123"/>
    <tree abc="456"/>
    <tree-order abc="789/>
</test>

<test>
    <tree abc="123"/>
    <tree abc="456"/>
    <tree-order abc="789/>
</test>

</Main>

谢谢.

推荐答案

如果您想对现有 xml 重新排序,可以使用 XQuery:

If you want to reorder existing xml, you can use XQuery:

declare @data xml = '
<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>
'

select @data.query('<test>{for $i in test/* order by $i/@abc return $i}</test>')

结果:

<test>
  <tree abc="123" />
  <tree-order abc="456" />
  <tree abc="789" />
</test>

sql 小提琴演示

更新:

要对多个节点重新排序,您可以像这样使用 XQuery:

To reorder multiple nodes, you can use XQuery like this:

select @data.query('
    element Main {
        for $j in Main/test
            return element test {
                for $i in $j/* order by $i/@abc return $i
            }
    }
')

sql 小提琴演示

更新 2

要按属性的整数值排序,请使用 cast as <类型>:

To order by integer values of attributes, use cast as <type>:

select @data.query('
    element Main {
        for $j in Main/test
            return element test {
                for $i in $j/* order by $i/@abc cast as xs:integer?
                    return $i
            }
    }
')

sql 小提琴演示

这篇关于SQL Server : FOR XML 按属性排序控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆