【问题标题】:Sort all attributes of XML in SQL query using XQuery使用 XQuery 对 SQL 查询中 XML 的所有属性进行排序
【发布时间】:2011-11-06 00:59:37
【问题描述】:

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

例如对于这个 XML:

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

必须返回:

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

【问题讨论】:

  • 您使用的是哪个数据库?

标签: sql xml xquery-sql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自Limitations of the xml Data Type

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

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

    【讨论】:

    • 感谢您提供有用的超链接。但我终于可以将其保存为 NVARCHAR 字符串。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      除了Mikael Eriksson's helpful answer SQL Server 不会保留 XML 属性排序,Michael Kay's special accommodation in Saxon 用于按名称按字母顺序序列化属性之外,未来的读者应该注意XML Recommendation 表示the order of XML attributes is insignificant

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

      因此,XML 工具通常不关心属性排序,除非您关心 XML 规范化/规范化1,否则您也不应该。如果 XML 建议中没有对属性排序的规定,通过利用诸如 saxon:attribute-order 之类的特殊机制来实现排序可能只是暂时的、本地化的成功,因为 XML 生态系统不会保证任何排序,因为您的 XML 通过工具和工具链贯穿其生命周期。

      1对于这些罕见的情况,请参阅XML Normalization Recommendation 中的section on attribute processingCanonical XML Recommendation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        相关资源
        最近更新 更多