要素の順序を無視して XML ファイルを比較するオープン ソースのコマンドライン ツール (Linux 用) はありますか?
入力ファイルの例a.xml
:
<tag name="AAA">
<attr name="b" value="1"/>
<attr name="c" value="2"/>
<attr name="a" value="3"/>
</tag>
<tag name="BBB">
<attr name="x" value="111"/>
<attr name="z" value="222"/>
</tag>
<tag name="BBB">
<attr name="x" value="333"/>
<attr name="z" value="444"/>
</tag>
b.xml
:
<tag name="AAA">
<attr name="a" value="3"/>
<attr name="b" value="1"/>
<attr name="c" value="2"/>
</tag>
<tag name="BBB">
<attr name="z" value="444"/>
<attr name="x" value="333"/>
</tag>
<tag name="BBB">
<attr name="x" value="111"/>
<attr name="z" value="222"/>
</tag>
したがって、これら 2 つのファイルを比較しても、違いは出力されません。最初に XSLT を使用してファイルを並べ替えようとしました。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="WINDOWS-1252" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="@*" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
しかし問題は、要素<tag name="BBB">
にはソートがないことです。それらは、入力された順序で単純に出力されます。
diffXml
、xDiff
、を既に見ましたがXMLUnit
、xmlstarlet
これらのどれも問題を解決しません。diff の出力は、たとえばdiff
.
要素の順序の差分をソートまたは無視する方法についてのヒントはありますか? ありがとう!