SQLでXQueryを使用して、ソートされた属性を持つXMLを取得するにはどうすればよいですか?
たとえば、このXMLの場合:
<root><book b='' c='' a=''/></root>
返す必要があります:
<root><book a='' b='' c=''/></root>
SQLでXQueryを使用して、ソートされた属性を持つXMLを取得するにはどうすればよいですか?
たとえば、このXMLの場合:
<root><book b='' c='' a=''/></root>
返す必要があります:
<root><book a='' b='' c=''/></root>
XML では属性は順序付けされていないため、属性がどの順序で出力されても、ドキュメントは同じと見なされます。XQuery には確かに属性の順序を変更する方法はなく、SQL XML にも変更があるとは思えません。
xml データ型の制限から。
XML インスタンス内の属性の順序は保持されません。xml 型の列に格納されている XML インスタンスをクエリすると、結果の XML の属性の順序が元の XML インスタンスと異なる場合があります。
そのため、属性を並べ替える方法を理解できたとしても、SQL Server の XML データ型が目的の順序を保持しているとは言えません。
属性の順序には意味的な意味はありませんが、XML の設計目標の 1 つは人間が判読できるようにすることです。そのため、属性の順序が一貫しており、ユーザーの期待を反映する字句 XML を生成しようとすることは、完全に不合理ではありません。よりも例<point x="2" y="5" z="7"/>
の方が見やすいです<point z="7" x="2" y="5"/>
。そのため、Saxon シリアライザーsaxon:attribute-order
には、出力 XML 内の属性の順序を制御できるオプションがあります。