问题描述
我正在从 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>
更新:
要对多个节点重新排序,您可以像这样使用 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
}
}
')
更新 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 Server : FOR XML 按属性排序控制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!