匹配名称相同但子值不同的标签

Matching tags with identical names but different child values

我正在尝试使用 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 子元素的嵌套文本标识。