我正在尝试使用XMLUnit 2比较xml文件。

<composite>
    <data>
        <subtag>
            <code>1</code>
        </subtag>
        <subtag>
            <code>2</code>
        </subtag>
    </data>
</composite>


第二个文件是相同的,唯一的区别是'subtag'标签的切换位置。

<composite>
    <data>
        <subtag>
            <code>2</code>
        </subtag>
        <subtag>
            <code>1</code>
        </subtag>
    </data>
</composite>


到目前为止,我一直不走运,找到了一组适合匹配这两个元素的ElementMatchers。

是否有针对此问题的现成解决方案?

最佳答案

这与XMLUnit用户指南中的“ tr由嵌套th标识”示例几乎相同。一种解决方案是使用条件ElementSelector并确保在决定采用哪个subtag时使用正确的规则-请参见https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors

在您的具体情况下

ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("subtag")
    .thenUse(ElementSelectors.byXPath("./code", ElementSelectors.byNameAndText))
    .elseUse(ElementSelectors.byName)
    .build();


应该做。假设subtag由其code子元素的嵌套文本标识。

08-28 16:32