在比较junit中的两个xml文件时,如何使用xmlunit忽略specpic xml元素

时间:2017-06-04 03:34:45

标签: java junit xml-parsing xmlunit

我尝试在JUnit中编写一个测试用例来比较两个xml文件。使用xmlunit,我应该能够找到所有的差异。但是在比较时,虽然我提供了类似的文件,但我总是得到false。每个xml文件的时间戳都不同。因此,尽管xml文件中的所有其他内容都相同,但它返回false。请提供任何正确的方法来解决这个问题。

在比较两个xml文件时,我需要忽略xml文件中的timestamp标记。我如何忽略自闭标签?

<XML>
<TIMESTAMP>KALA</TIMESTAMP>
<B>JIHN</B>
<C>Lion</C>
</XML>

<XML>
<TIMESTAMP>QWER</TIMESTAMP>
<B>JIHN</B>
<C NAME =LION/>
</XML>
<B>JIHN</B>

1 个答案:

答案 0 :(得分:0)

XMLUnit 2.x具有NodeFilter s的概念,使用它可以轻松忽略TIMESTAMP个元素。像

这样的东西
String control = "<XML>\n"
    + "<TIMESTAMP>KALA</TIMESTAMP>\n"
    + "<B>JIHN</B>\n"
    + "<C>Lion</C>\n"
    + "</XML>";
String test = "<XML>\n"
    + "<TIMESTAMP>QWER</TIMESTAMP>\n"
    + "<B>JIHN</B>\n"
    + "<C NAME=\"LION\"/>\n"
    + "</XML>";
Diff d = DiffBuilder.compare(Input.fromString(control))
    .withTest(Input.fromString(test))
    .withNodeFilter(n -> !(n instanceof Element && Nodes.getQName(n).getLocalPart().equals("TIMESTAMP")))
    .build();

可能是一个开始。

我不确定自闭标签是什么意思。就XMLUnit而言,<x></x><x/>是完全相同的。您的示例中的C元素显然不是。第一个没有属性,只有嵌套文本,第二个有一个名为NAME但没有嵌套测试的属性。