5

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

例如对于这个 XML:

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

必须返回:

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

4 回答 4

2

属性在 XML 中是无序的,因此无论打印出属性的顺序如何,文档都被认为是相同的。XQuery 肯定无法更改属性的顺序,我怀疑 SQL XML 也可以。

于 2011-08-29T20:48:08.137 回答
1

来自xml 数据类型的限制

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

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

于 2011-09-14T17:03:35.540 回答
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

于 2017-05-23T08:41:14.227 回答
0

除了Mikael Eriksson关于 SQL Server 不会保留 XML 属性排序的有用回答,以及Michael Kay 在 Saxon中按名称按字母顺序排列属性的特殊调整之外,还应警告未来的读者,XML 建议书XML 属性的顺序无关紧要

请注意,开始标签或空元素标签中属性规范的顺序并不重要。

Therefore, XML tools generally do not care about attribute ordering, and unless you are concerned with XML normalization/canonicalization1, neither should you. Without provision for attribute ordering in the XML Recommendation, achieving an ordering by leveraging special mechanisms such as saxon:attribute-order will likely prove to be only a temporary, localized success as the XML ecosystem will not guarantee any ordering as your XML passes through tools and toolchains through its life cycle.

1For those rare circumstances, see the section on attribute processing in the XML Normalization Recommendation or the Canonical XML Recommendation.

于 2017-05-23T12:37:07.523 回答