为什么这两个xml字符串不相似

时间:2014-03-11 15:44:42

标签: java xmlunit

我有两个类似的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());
}

1 个答案:

答案 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

不同