我如何比较类似地图的元素与 XMLUnit

How can I compare map-like elements with XMLUnit

我有以下 xml 数据:

控制:

 <Data>

        <propertyValues>
            <propertyName>Name1</propertyName>
            <value>
                <text>
                    <value>Value1</value>
                </text>
            </value>
        </propertyValues>
        <propertyValues>
            <propertyName>Name2</propertyName>
            <value>
                <text>
                    <value>Value2</value>
                </text>
            </value>
        </propertyValues>
 </Data>

测试:

 <Data>
            <propertyValues>
                <propertyName>Name2</propertyName>
                <value>
                    <text>
                        <value>Value2</value>
                    </text>
                </value>
            </propertyValues>
            <propertyValues>
                <propertyName>Name1</propertyName>
                <value>
                    <text>
                        <value>Value1</value>
                    </text>
                </value>
            </propertyValues>
 </Data>

我希望这两份文件是 "same"。

如何配置 xmlUnit 使其工作? (我使用的是 xml2.6.3 单元)

谢谢

莱昂

这与 XMLUnit 用户指南 "Selecting Nodes" 部分的 运行 示例非常相似。

您需要使用 ElementSelector 在查看元素列表时选择正确的 propertyValues 元素,然后决定比较唯一 [= 中包含相同嵌套文本的元素24=] 名为 propertyName 的元素。这直接转化为

ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("propertyValues")
    .thenUse(ElementSelectors.byXPath("./propertyName", ElementSelectors.byNameAndText))
   ...

然后您需要添加任何其他规则才能使其余工作正常进行。查看示例的可见其余部分,没有模棱两可的 children 和简单的

   ...
    .elseUse(ElementSelectors.byName)
    .build();

会做。