.net 使用XmlUnit进行微分时如何忽略元素顺序
我有以下格式的XML:.net 使用XmlUnit进行微分时如何忽略元素顺序,.net,xmlunit,xmldiff,.net,Xmlunit,Xmldiff,我有以下格式的XML: <Root> <Elem1> <SubElem1>A</SubElem1> ... </Elem1> <Elem1> <SubElem1>B</SubElem1> ... </Elem1> <Elem2> ... </El
<Root>
<Elem1>
<SubElem1>A</SubElem1>
...
</Elem1>
<Elem1>
<SubElem1>B</SubElem1>
...
</Elem1>
<Elem2>
...
</Elem2>
...
</Root>
A.
...
B
...
...
...
我想指示XmlUnit的diff引擎忽略元素的顺序,但只在它们的“组”内
例如:
- 如果上一个示例中的第二个和第一个Elem1将改变顺序=>equal
- 元素2在元素1之前或元素1=>差异
有没有办法达到这个结果?是的,这是
ElementSelector
的工作。默认情况下,XMLUnit(2.x)会按照元素的显示顺序进行比较,但您可以使用ElementSelector
来影响拾取的同级元素
在您的案例中,您似乎乐于按顺序选择元素,除非它们被命名为Elem1
。对于Elem1
您希望根据嵌套在子元素1
子元素中的文本选择对。编写这种元素选择器的一种方法是
ElementSelectors.ConditionalBuilder()
.WhenElementIsNamed("Elem1")
.ThenUse(ElementSelectors.ByXPath("./SubElem1", ElementSelectors.ByNameAndText))
.ElseUse(ElementSelectors.Default)
.Build();
有关更多详细信息和示例,请参阅XMLUnit。我必须根据自己的需要调整您的答案,因为我希望所有元素都组合在一起,不仅是Elem1元素,而且ElementSelector为我指明了正确的方向。