当前位置: 首页 > 知识库问答 >
问题:

使用xmlunit定制输出消息的XML比较

支铭晨
2023-03-14

嗨,我正在尝试使用XMLUnit比较两个xml文件的内容
以下是我的输入xmls

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <name>abc</name>
        <isbn>9971-5-0210-0</isbn>
        <author>abc</author>
        <category></category>
    </book>
    <book>
        <name>def</name>
        <isbn>9971-5-0222-0</isbn>
        <author>def</author>
    </book>
</books>
<?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book>
            <name>abc</name>
            <isbn>9971-5-0210-0</isbn>
            <author>abc</author>
            <category></category>
        </book>
        <book>
            <name>def</name>
            <isbn>9971-5-0222-0</isbn>
            <author>def</author>
        </book>
        <book>
            <name>ghi</name>
            <isbn>9971-5-0222-0</isbn>
            <author>test authora</author>
        </book>
    </books>
 DetailedDiff detDiff = new DetailedDiff(diff);
    List differences = detDiff.getAllDifferences();
    System.out.println("Total differences:-->"+differences.size());
    for (Object object : differences) {
        Difference difference = (Difference)object;
        System.out.println("***********************");
        System.out.println(difference);
        System.out.println("***********************");
    }
**Total differences:-->4

预期存在子节点'null',但为'book'-将null与at/books[1]/book[3]进行比较

预期存在子节点'null',但为'#text'-将null与at/books[1]/text()[4]进行比较

取而代之的是,有什么方法可以让我将change仅视为1(因为我认为只添加了一个book节点,忽略了内部标记),并将输出自定义为我们自定义的消息

共有1个答案

隗嘉歆
2023-03-14

第一步是忽略元素内容空白,这将消除第二个和第四个差异。

XMLUnit.setIgnoreWhitespace(true);

为了抑制另外两个差异之一,您需要重写DifferenceListener并显式忽略其中一个。从您所描述的内容来看,您希望只看到child_node_not_found的差异。

    detDiff.overrideDifferenceListener(new DifferenceListener() {
            @Override
            public int differenceFound(Difference difference) {
                return difference.getId() == DifferenceConstants.CHILD_NODELIST_LENGTH_ID
                    ? RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL
                    : RETURN_ACCEPT_DIFFERENCE;
            }
            @Override
            public void skippedComparison(Node control, Node test) { }
        });
 类似资料:
  • 我正在尝试验证和检查两个XML文件之间的差异。 XML文件1: 我应该如何比较这两个文件包含相同的信息(不关心信息的生成顺序),有什么想法吗?

  • 我需要比较使用自定义差异侦听器忽略子节点序列和属性列表序列的2个XML: 我的代码适用于: 我找到了一个临时的解决方案(8小时内不能在我自己的问题上添加评论): 我之前用:ElementNameAndAttributeQualifier重写了ElementQualifier,如果我将其更改为RecursiveElementNameAndTextQualifier,我可以得到我想要的结果 还可以使用

  • 问题内容: 我有两个XML文件: 在比较这两个文件时,我不得不忽略Node 的属性:。 我正在使用: 大多数在线解决方案建议实施: 也尝试过该操作,但这会忽略所有具有属性ID的节点,而我想忽略特定节点的属性: 我的Test类中的调用方法: 有人可以建议我一种使用XMLUnit 2.x的新方法来实现此目标,请相应地提供帮助。 提前致谢。 问题答案: 如果您确实愿意,可以使用一个。您只需要做的就是测试

  • 我知道您可以使用try-catch块对自定义消息抛出异常,例如: 但是如果我们在实用程序类中有一个方法,例如: 然后我们进入服务类,如下所示: 有没有一种方法可以自定义设置来自实用程序类方法<code>processFiles()</code>的消息及其<code>抛出的IOException</code>,而不是在该方法内部使用try-catch块?

  • 我使用的是jboss KeyCloak1.5最终版本。我开发了与keycloak属性和我的用户企业数据库接口的自定义用户联邦提供程序。 我的需要是发送到用户登录界面自定义的错误消息,基于特定的特定错误与我的遗留用户数据库。

  • 所以我是Laravel新手。基本上,我试图做的是在加载Laravel默认着陆页时查看“你好世界”消息。我有以下内容, 但是“hello world”并没有出现在终端上。这是不是在Laravel中正确使用了?我们将不胜感激。 谢谢