微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在xmlunit中比较前缀和无前缀的xml文档以获得相似的结果

如何解决如何在xmlunit中比较前缀和无前缀的xml文档以获得相似的结果

xmlnit 无法识别以下两个“相同”的 xml(除了一个定义了命名空间的)文档是相似的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:message xmlns:ns3="https://www.bookmarks.dev/xml/bookmarks">
    <ns3:bookmarks>
        <ns3:bookmark>
            <ns3:name>Bookmarks and Snippets Manager</ns3:name>
            <ns3:url>https://www.bookmarks.dev</ns3:url>
        </ns3:bookmark>
    </ns3:bookmarks>
</ns3:message>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
    <bookmarks>
        <bookmark>
            <name>Bookmarks and Snippets Manager</name>
            <url>https://www.bookmarks.dev</url>
        </bookmark>
    </bookmarks>
</message>

失败的单元测试比较两者:

  @Test
  void givenSameMessageOneWithoutNamespace_shouldBeSimilar() {
    ClassLoader classLoader = getClass().getClassLoader();
    final var withNamespaceInput =
        Input.from(
            new File(classLoader.getResource("with-namespace.xml").getFile()));
    final var noNamespaceInput =
        Input.from(
            new File(
                classLoader
                    .getResource("no-namespace.xml")
                    .getFile()));

    final Diff documentDiff =
            DiffBuilder.compare(withNamespaceInput)
                    .withTest(noNamespaceInput)
                    .checkForSimilar()
                    .build();

    assertthat(documentDiff.hasDifferences()).isFalse();
  }

差异表现为 Expected namespace uri 'null' but was 'https://www.bookmarks.dev/xml/bookmarks' - comparing <message...> at /message[1] to <ns3:message...> at /message[1] (DIFFERENT)...

任何想法如何配置比较器以忽略第二个文档中缺少的前缀?

解决方法

我的问题是,在生成无命名空间文档时,我没有在根元素中定义默认命名空间。添加它解决了问题,xmlunit 将它们识别为相似:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="https://www.bookmarks.dev/xml/bookmarks">
    <bookmarks>
        <bookmark>
            <name>Bookmarks and Snippets Manager</name>
            <url>https://www.bookmarks.dev</url>
        </bookmark>
    </bookmarks>
</message>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。