使用XQuery对SQL查询中的XML的所有属性进行排序

时间:2011-08-29 13:26:10

标签: sql xml xquery-sql

如何在SQL中使用XQuery获取带有排序属性的XML?

例如,这个XML:

<root><book b='' c='' a=''/></root>

必须返回:

<root><book a='' b='' c=''/></root>

4 个答案:

答案 0 :(得分:2)

属性在XML中是无序的,因此无论打印属性的顺序如何,文档都被认为是相同的.XQuery当然无法改变属性的顺序,我怀疑SQL XML是否也这样做。

答案 1 :(得分:1)

来自Limitations of the xml Data Type

  

不保留XML实例中的属性顺序。当你   查询存储在xml类型列中的XML实例的顺序   生成的XML中的属性可能与原始XML不同   实例

因此,即使你能找到一种排序属性的方法,你也不能相信SQL Server中的XML数据类型会保留你想要的顺序。

答案 2 :(得分:1)

尽管属性的顺序没有语义意义,但XML的设计目标之一是人类可读,因此尝试生成属性顺序一致并反映用户的词法XML并非完全不合理。期望:例如<point x="2" y="5" z="7"/><point z="7" x="2" y="5"/>更容易。因此,Saxon序列化程序有一个选项saxon:attribute-order,允许控制输出XML中的属性排序:请参阅http://www.saxonica.com/documentation/index.html#!extensions/output-extras/serialization-parameters

答案 3 :(得分:0)

超越Mikael Eriksson's helpful answer SQL Server不会保留XML属性排序,Michael Kay's special accommodation in Saxon按名称按字母顺序排列属性,应该警告未来的读者XML Recommendation表示{{3} }}:

  

请注意start-tag或中的属性规范的顺序   空元素标签不重要。

因此,XML工具通常不关心属性排序,除非您关注XML规范化/规范化 1 ,否则不应该。如果没有在XML建议书中提供属性排序,那么通过利用saxon:attribute-order等特殊机制实现排序可能只是暂时的本地化成功,因为XML生态系统不能保证任何排序,因为您的XML通过了工具和工具链的整个生命周期。

1 对于极少数情况,请参阅the order of XML attributes is insignificantsection on attribute processing中的XML Normalization Recommendation