与 XmlUnit 比较时如何忽略元素顺序

How to ignore element order when diffing with XmlUnit

我有 XML 格式如下:

<Root>
    <Elem1>
        <SubElem1>A</SubElem1>
        ...
    </Elem1>
    <Elem1>
        <SubElem1>B</SubElem1>
        ...
    </Elem1>
    <Elem2>
        ...
    </Elem2>
    ...
</Root>

我想指示 XmlUnit 的差异引擎忽略 ElemN 元素的顺序,但仅限于它们的 "group"。

例如:

有没有办法实现这个结果?

是的,这是ElementSelector的工作。默认情况下,XMLUnit (2.x) 按照元素出现的顺序比较元素,但您可以通过使用 ElementSelector.

来影响选择哪个兄弟元素

根据你的情况,你似乎很乐意按顺序选择元素,除非它们被命名为 Elem1。对于 Elem1,您希望根据嵌套到 SubElement1 子项中的文本来选择对。编写这样的 ElementSelector 的一种方法可能是

ElementSelectors.ConditionalBuilder()
    .WhenElementIsNamed("Elem1")
    .ThenUse(ElementSelectors.ByXPath("./SubElem1", ElementSelectors.ByNameAndText))
    .ElseUse(ElementSelectors.Default)
    .Build();

有关更多详细信息和示例,请参阅 XMLUnit user guide