繁体   English   中英

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

[英]How to ignore specfic xml elements using xmlunit when comparing two xml files in junit

我试图在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>

XMLUnit 2.x具有NodeFilter的概念,使用它可以轻松地忽略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属性,名称为NAME

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM