是否有开源命令行工具(适用于 Linux)来区分忽略元素顺序的 XML 文件?
示例输入文件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>
所以比较这两个文件不应该输出任何差异。我尝试先使用 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
.
关于如何解决排序或忽略元素顺序差异的任何提示?谢谢!