如何解决如何在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 举报,一经查实,本站将立刻删除。