有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图在JUnit中编写一个测试用例来比较两个xml文件。使用xmlunit,我应该能够找到所有的差异。但是在比较时,我总是得到false,尽管我给出了类似的文件。每个xml文件的时间戳都不同。所以,尽管xml文件中的所有其他内容都是相同的,但返回的却是false。请给我提供任何适当的方法来处理这个问题

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

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

  1. # 1 楼答案

    第二单元。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();
    

    这可能是一个开始

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