如何使用XmlUnit进行差异时忽略元素顺序

时间:2017-01-24 10:32:04

标签: .net xmlunit xmldiff

我有以下格式的XML:

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

我想指示XmlUnit的差异引擎忽略ElemN元素的顺序,但仅限于他们的&#34;组&#34;。

E.g:

  • 如果前一个示例中的第二个和第一个Elem1将改变order =&gt;等于
  • 如果Elem2将在Elem1之前或在Elem1中间=>差

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

1 个答案:

答案 0 :(得分:0)

是的,这是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