首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两种使用XMLUnit的xml绕过元素顺序的比较

两种使用XMLUnit的xml绕过元素顺序的比较
EN

Stack Overflow用户
提问于 2018-01-11 22:05:06
回答 1查看 1K关注 0票数 0

我正在编写一个比较工具,它允许我在不考虑顺序的情况下比较两个xml的相似性。Am使用xmlunit 2.4.0

代码语言:javascript
复制
org.xmlunit.diff.Diff diff = DiffBuilder.compare(xml1)
                .withTest(xml2)
                .checkForSimilar()
                .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText))
                .build();

因此,下面的两个xml成功地进行了比较。

xml1:

代码语言:javascript
复制
<multistatus>
    <flowers>
        <flower>Roses</flower>
        <flower>Daisy</flower>
    </flowers>
    <flowers>
        <flower>Roses</flower>
        <flower>Daisy</flower>
    </flowers>
</multistatus>

xml2:

代码语言:javascript
复制
<multistatus>
    <flowers>
        <flower>Roses</flower>
        <flower>Daisy</flower>
    </flowers>
    <flowers>
        <flower>Daisy</flower>
        <flower>Roses</flower>
    </flowers>
</multistatus>

但是,当我提供以下输入时,这将失败: xml1:

代码语言:javascript
复制
<multistatus>
    <flowers>
        <flower>Roses</flower>
    </flowers>
    <flowers>
        <flower>Daisy</flower>
    </flowers>
</multistatus>

xml2:

代码语言:javascript
复制
<multistatus>
    <flowers>
        <flower>Daisy</flower>
    </flowers>
    <flowers>
        <flower>Roses</flower>
    </flowers>
</multistatus>

我试着创建了ElementSelector,即使这样也没有帮助。

代码语言:javascript
复制
ElementSelector selector = ElementSelectors.conditionalBuilder()
                .whenElementIsNamed("flowers").thenUse(ElementSelectors.byXPath("./flowers/flower", ElementSelectors.byNameAndText))
                .elseUse(ElementSelectors.byName)
                .build();

        org.xmlunit.diff.Diff diff = DiffBuilder.compare(refSource)
                .withTest(testSource)
                .checkForSimilar()
                .ignoreWhitespace()
                .normalizeWhitespace()
                .withNodeMatcher(
                        new DefaultNodeMatcher(
                                selector,ElementSelectors.Default)
                )
                .build();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 08:47:56

你的XPath和任何东西都不匹配。

“上下文”。是使用whenElementIsNamed选择的节点,因此它是各自的“花”元素。

你的意思可能是“./花”--它在你的例子中找不到任何不同之处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48216562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档