与 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"。
例如:
- 如果前面例子中的第二个和第一个 Elem1 会改变顺序 => 等于
- 如果 Elem2 在 Elem1 之前或在 Elem1 中间 => 区别
有没有办法实现这个结果?
是的,这是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。
我有 XML 格式如下:
<Root>
<Elem1>
<SubElem1>A</SubElem1>
...
</Elem1>
<Elem1>
<SubElem1>B</SubElem1>
...
</Elem1>
<Elem2>
...
</Elem2>
...
</Root>
我想指示 XmlUnit 的差异引擎忽略 ElemN 元素的顺序,但仅限于它们的 "group"。
例如:
- 如果前面例子中的第二个和第一个 Elem1 会改变顺序 => 等于
- 如果 Elem2 在 Elem1 之前或在 Elem1 中间 => 区别
有没有办法实现这个结果?
是的,这是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。