各要素の属性を名前(値ではなく)で並べ替えて、XMLデータの表現を正規化しようとしています。アイデアは、属性が追加または削除されたときにテキストの違いを最小限に抑え、異なるエディタが同等のバリアントを導入しないようにすることです。これらのXMLファイルはソース管理下にあり、開発者は特殊なXMLツールに頼らずに変更を比較したいと考えています。XSLを使用して属性を並べ替える
私は驚いたではありませんどのようにこれのXSLの例を見つける。基本的には、ソートされた属性を持つ恒等変換だけが必要です。私はすべてのテストケースで動作しているようで、次のを思い付いた:総XSLのN00Bとして
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="*|/|text()|comment()|processing-instruction()">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
私はスタイルや効率に任意のコメントをいただければ幸いです。少なくとも一般的な例ではないようだから、ここに投稿すると便利かもしれないと思った。
XSLトランスフォーマでは、属性に指定した順序が書き出された順序であることを保証しますか? –
XMLツールでは、上記のようにXML出力を構成しようとしても、XML出力で属性の順序が保持されるという保証はありません。また、値を引用するために使用されるシンボルを保証することさえできないことを覚えておいてください。 XMLの語彙比較は、通常、あまり考えられません。 –