我有两个类似的xml字符串。我使用XMLUnit来比较它们,但是在我运行一些样本测试来检查它们后,它说它们不相似且相同。我同意他们并不完全相同,但我认为它应该归于类似的。下面是我运行的字符串和测试代码。
<Errors>
<Error>
<Sheet>Sample1</Sheet>
<ErrorCode>4</ErrorCode>
<Columns>
<Column>Id</Column>
<Column>Name</Column>
</Columns>
</Error>
<Error>
<Sheet>Sample2</Sheet>
<ErrorCode>4</ErrorCode>
<Columns>
<Column>Id</Column>
<Column>Name</Column>
</Columns>
</Error>
</Errors>
和
<Errors>
<Error>
<Sheet>Sample1</Sheet>
<ErrorCode>4</ErrorCode>
<Columns>
<Column>Name</Column>
<Column>Id</Column>
</Columns>
</Error>
<Error>
<Sheet>Sample2</Sheet>
<ErrorCode>4</ErrorCode>
<Columns>
<Column>Name</Column>
<Column>Id</Column>
</Columns>
</Error>
</Errors>
唯一的区别是Column节点被反转,但我认为它应该返回两个字符串相似。
public void test() throws Exception{
String myControlXML = "here goes xml1";
String myTestXML = "here goes xml2";
Diff myDiff = new Diff(myControlXML, myTestXML);
System.out.println("pieces of XML are similar " + myDiff.similar());
System.out.println("but are they identical? " + myDiff.identical());
}
答案 0 :(得分:2)
只是猜测,但我认为问题是两个标签都有相同的名称。这听起来很矛盾,但让我解释一下:
<root>
<field>John</field>
<field>Smith</field>
</root>
<root>
<field>Smith</field>
<field>John</field>
</root>
对我来说,这两个XML并不像一个人说的那样 John Smith 而另一个说 Smith John
<person>
<name>John</name>
<surname>Smith</surname>
<person>
<person>
<name>John</name>
<surname>Smith</surname>
<person>
其他类似的:不完全相同,但显然都说 John Smith
换句话说:正如@JustinKSU所说,订单很重要。
<强>更新强>: 来自XMLUnit Java User's Guide:如果两个XML之间没有差异,则两个XML是相同的,如果它们之间只有可恢复的差异则相似,如果它们之间存在任何不可恢复的差异,则相似 < / p>
我的第二个例子显示了两个相似的XML片段,因为差异是可以恢复的。第一个不是因为我们不知道正确的顺序:也许有一个人的名字是史密斯,所以我们不能确定。您的示例是完全相同的情况:解析器无法知道列顺序是否重要。想象一下,您的XML用于选择如何订购SQL查询:
SELECT * FROM table order by name, id
显然与SELECT * FROM table order by id, name