XMLUnit 显示添加或删除的节点

XMLUnit show added or removed nodes

我有两个这样的 xml 文件:

<personlist>
    <person>
        <name>Test</name>
    </person>
    <person>
        <name>Test2</name>
    </person>
</personlist>

还有这个

<personlist>
    <person>
        <name>Test</name>
    </person>
</personlist>

我知道想使用 XMLUnit 来区分这两个 xml 文件。 XMLUnit 有没有办法告诉我添加或删除了哪些节点? 如果我比较 xml 个文件,我想要这样的结果:

1 person node removed

这个方法怎么样?

public class DifferenceinXMLTest extends XMLTestCase {
  @Test
  public void test() {
    final String xml1 = ""
    final String xml2 = ""
    XMLUnit.setIgnoreWhitespace(true); // ignore whitespace differences
    assertXMLEquals(xml1, xml2);  // assertXMLEquals comes from XMLTestCase
  }
}

要获取列表,您可以使用 detailediff class。

一些例子 - http://www.programcreek.com/java-api-examples/index.php?api=org.custommonkey.xmlunit.DetailedDiff

http://xmlunit.sourceforge.net/example.html

添加和删除节点是一种特殊的差异。因此,您需要使用一种能给您带来所有差异的方法。如果使用 XMLUnit 1.x 这意味着使用 DetailedDiffgetAllDifferences - 如果使用 XMLUnit 2.x 这意味着查看 DiffgetDifferences 并且很可能 DiffBuilder.

XMLUnit 将标记差异,其中控制或测试节点详细信息为 null,1.x 中的类型为 CHILD_NODE_NOT_FOUND_ID,2.x 中的类型为 CHILD_LOOKUP .如果测试详细信息是 null,则该节点已被删除。如果控件详细信息是 null,则已添加。

使用 XMLUnit 1.x 时确保设置 XMLUnit.setCompareUnmatched(false) 否则您可能根本不会收到任何 CHILD_NODE_NOT_FOUND 差异。