如何在SQL中使用XQuery获取带有排序属性的XML?
例如,这个XML:
<root><book b='' c='' a=''/></root>
必须返回:
<root><book a='' b='' c=''/></root>
答案 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 insignificant或section on attribute processing中的XML Normalization Recommendation。