Java XMLunit比较失败,因为子节点顺序

Java XMLunit比较失败,因为子节点顺序,java,xml,xsd,compare,xmlunit,Java,Xml,Xsd,Compare,Xmlunit,我将生成的XML文件与使用XMLunit的另一个示例进行比较,我发现ChildNodes顺序及其属性存在问题。 Linux和Mac的生成不同 这就是我尝试过的: @Test public void testComparingXML() throws Exception { XMLUnit.setIgnoreWhitespace(true); String expectedXml = IOUtils.toString(ConnectorStrategyStudioXmlTest.c

我将生成的XML文件与使用XMLunit的另一个示例进行比较,我发现ChildNodes顺序及其属性存在问题。 Linux和Mac的生成不同

这就是我尝试过的:

@Test
public void testComparingXML() throws Exception {
    XMLUnit.setIgnoreWhitespace(true);
    String expectedXml = IOUtils.toString(ConnectorStrategyStudioXmlTest.class.getClassLoader().getResourceAsStream(EXPECTED_XML));
    String actualXml = IOUtils.toString(ConnectorStrategyStudioXmlTest.class.getClassLoader().getResourceAsStream(ACTUAL_XML));
    Diff diff = new Diff(expectedXml, actualXml);
    diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
    DetailedDiff detailedDiff = new DetailedDiff(diff);
    assertTrue(detailedDiff.toString(), detailedDiff.similar());
}
我已经读到使用RecursiveElementNameAndTextQualifier类可以解决这个问题,但仍然不起作用

下面是一幅图像,其中有一个XML比较失败的示例: 在全屏c的新选项卡中打开:

如您所见,两个子节点都是反向的

提前打电话。Juan

使用非默认的ElementQualifier是正确的解决方案,但RecursiveElementAndTextQualifier肯定不能满足您的需要

乍一看,似乎应该可以通过查看元素的名称和caption属性的值来找到匹配的元素。如果这是正确的,那么作为构造函数参数传入标题的ElementNameandAttributeEqualifier应该可以完成这项任务

XMLUnit中内置了更多选项,在最坏的情况下,如果现有选项都不符合您的需要,您需要自己实现ElementQualifier接口。

使用非默认ElementQualifier是正确的解决方案,但RecursiveElementAndTextQualifier肯定不能满足您的需要

乍一看,似乎应该可以通过查看元素的名称和caption属性的值来找到匹配的元素。如果这是正确的,那么作为构造函数参数传入标题的ElementNameandAttributeEqualifier应该可以完成这项任务


XMLUnit中内置了更多选项,在最坏的情况下,如果现有选项都不符合您的需要,您需要自己实现ElementQualifier接口。

非常感谢!这很管用,谢谢!它起作用了