支持我有两个xml字符串
<test>
<elem>a</elem>
<elem>b</elem>
</test>
<test>
<elem>b</elem>
<elem>a</elem>
</test>
Run Code Online (Sandbox Code Playgroud)
如何编写一个比较这两个字符串并忽略元素顺序的测试?
我希望测试尽可能短,没有10行XML解析等的地方.我正在寻找一个简单的断言或smt类似.
我有这个(不起作用)
Diff diff = XMLUnit.compareXML(expectedString, actualString);
XMLAssert.assertXMLEqual("meh", diff, true);
Run Code Online (Sandbox Code Playgroud) 是否有一个开源命令行工具(用于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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
因此,比较这两个文件不应该输出任何差异.我试图先用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> …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个diff工具,它允许我比较2 xml(或json)文件忽略其元素的顺序.
例:
<Node>
<Child name="Alpha"/>
<Child name="Beta"/>
<Child name="Charlie"/>
</Node>
<Node>
<Child name="Beta"/>
<Child name="Charlie"/>
<Child name="Alpha2"/>
</Node>
Run Code Online (Sandbox Code Playgroud)
2节点元素应该被认为是相似的,唯一不同的是Node1具有子名"Alpha",在另一个节点中是"Alpha2".
StackOverflow有一个类似的问题,但8年前被问到,该解决方案不再有效.有更新的工具吗?
diff ×2
xml ×2
command-line ×1
java ×1
json ×1
junit ×1
open-source ×1
sorting ×1
unit-testing ×1
xmlunit ×1