Java:使用XMLUnit比较XML

0 java xml junit

我试图使用XMLUnit 1.3来比较两个相似的XML文件.基本上每件事都是一样的.file1是file2的副本.

但是在File2中,我改变了一个节点中某些值/元素的顺序.

file1.xml

<root> 
  <ent> 
   <value> 
     <string>ada,cmb</string>  
   </value>    
  </ent> 
</root>
Run Code Online (Sandbox Code Playgroud)

file2.xml

<root> 
  <ent> 
   <value> 
     <string>cmb,ada</string>  
   </value>    
  </ent> 
</root>
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这两个文件必须相等.是否可以使用XMLUnit实现这一目标?

我的代码

public void testXml() throws ParserConfigurationException, SAXException, IOException {  
    String refXmlPaht = "../test1.xml";
    String testXmlPaht = "../test2.xml";
    Document doc1 = TransformXML.convertXmlToDom(refXmlPaht);
    Document doc2 = TransformXML.convertXmlToDom(testXmlPaht);

    Diff myDiff = new Diff(doc1, doc2);
    XMLUnit.setIgnoreWhitespace(true);
    XMLUnit.setIgnoreComments(true);
    XMLUnit.setIgnoreAttributeOrder(true);

    assertXMLEqual("pieces of XML are not similar ", myDiff, true);
    assertTrue("but are they identical? " + myDiff, myDiff.identical());
}
Run Code Online (Sandbox Code Playgroud)

XMLUnit响应

junit.framework.AssertionFailedError: but are they identical? 

org.custommonkey.xmlunit.Diff
    [different] Expected text value 'ada,cmb' but was 'cmb,ada' - comparing <string ...>ada,cmb</string> at /root[1]/ent[1]/value[1]/string[1]/text()[1] to <string ...>cmb,ada</string> at /root[1]/ent[1]/value[1]/string[1]/text()[1]...
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

最好的祝福,

科班

dog*_*ane 7

您可以创建自己的DifferenceListener实现以下方法:

int differenceFound(Difference difference);
Run Code Online (Sandbox Code Playgroud)

只要检测到差异就会调用此方法,然后您可以对控制节点和测试节点的内容执行一些字符串检查,以查看它们对您的意义是否相同.如果是,则可以返回值RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL,以便XMLUnit将节点视为相同.

有关更多信息,请查看用户指南.