java - 匹配具有相同名称但不同子值的标签

标签 java xml xmlunit

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

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

第二个文件是相同的,唯一的区别是“子标签”标签交换了位置。

<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();

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

关于java - 匹配具有相同名称但不同子值的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50567304/

相关文章:

javascript - 带有 javascript 的多功能 xml 属性正则表达式

xml - 从不同的文档 xslt 2.0 复制时命名空间问题

java - 使用JAVA中的geotools在定义的距离(km)内从一条线(GPS坐标)生成多边形

java - org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException : Unauthorized

java - 使用 JSP 从 Java 返回 CSS 类样式

java - 如何使用 XMLUnit 详细差异忽略相同元素的顺序?

java - 如何通过跳过几个节点来比较两个 xml?

java - Grails Spring 安全 : Anonymous pages not showing authentication information

java - JaxB2Marshaller 不将 XML 绑定(bind)到 Kotlin 数据类

用于单元测试的 .net Xml 比较器