XML では、要素の一連の属性で定義された標準的な順序付けはありません。これは、実装ごとに異なる場合があります。
また、2 つの XML ドキュメントの唯一の違いが属性の順序である場合、それらは「等しい」と見なされます。たとえば、XPath 2.0 関数 deep-equal($doc1, $doc2) は true() を生成します。
これはクラス定義に似ています。プロパティ (またはメソッド) の順序のみが異なる 2 つのクラス定義は同じクラス定義であり、インスタンスを使用するプログラムと異なる結果を生じることなく、互いに置き換えることができます。このクラス定義。
以下は、属性の順序のみが異なる場合、2 つのドキュメントが「等しい」と見なされるという事実のデモです。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vDoc2">
<t y="2" x="1" />
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select="deep-equal(/, $vDoc2)"/>
</xsl:template>
</xsl:stylesheet>
この変換が次の XML ドキュメントに適用される場合:
<t x="1" y="2"/>
結果は次のとおりです。
true
XML パーサーと XSLT プロセッサの両方の特定の実装で属性が特定の順序で表示されるハックが見つかったとしても、このハックがこの実装の次のバージョンで動作することは保証されません。