Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用XmlUnit进行微分时如何忽略元素顺序_.net_Xmlunit_Xmldiff - Fatal编程技术网

.net 使用XmlUnit进行微分时如何忽略元素顺序

.net 使用XmlUnit进行微分时如何忽略元素顺序,.net,xmlunit,xmldiff,.net,Xmlunit,Xmldiff,我有以下格式的XML: <Root> <Elem1> <SubElem1>A</SubElem1> ... </Elem1> <Elem1> <SubElem1>B</SubElem1> ... </Elem1> <Elem2> ... </El

我有以下格式的XML:

<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为我指明了正确的方向。