2009-12-05 46 views
1

如何使用XMLUnit比较2个不同文件中的2个或更多节点(同名)?如何使用XMLUnit比较文件的某些部分?

我有一个看起来像这样2个XML文件:

<SearchResults> 
    <result type="header"> ...ignore this.... </result> 
    <result type="secondheader">...ignore this....</result> 
    <result>....data1....</result> 
    <result>....data2....</result> 
    <result>....data3....</result> 
    <result type="footer">...ignore this....</result> 
</SearchResults> 

这里是我的方法,我用到目前为止比较。问题是我不想比较带有结果标签的xml部分和其上的任何类型的属性标志。我怎样才能做到这一点?

public void compareXMLEqualityToLastTest() throws Exception { 
    System.out.println("Checking differences."); 
    File firstFile = new File("C:\\Eclipse\\workspace\\Tests\\log\\" + 
       "Test_2.xml"); 
    String file1sub = readXMLFromFile(firstFile); 
    File secondFile= new File("C:\\Eclipse\\workspace\\Tests\\log\\" + 
       "Test_1.xml"); 
    String file2sub = readXMLFromFile(secondFile); 
    assertXMLNotEqual("files are equal", file1sub, file2sub); 
    assertXMLEqual("files are not equal", file1sub, file2sub); 
} 

我发现了一个模糊的建议到XMLUnit测试说明书第5页上使用ElementQualifier,但我不明白它。我不知道如何告诉它要比较哪个节点。

Diff myDiff = new Diff(file1sub, file2sub); 
     myDiff.overrideElementQualifier(new ElementNameAndTextQualifier()); 
     assertXMLEqual("But they are equal when an ElementQualifier controls " + 
    "which test element is compared with each control element", myDiff, true); 

我应该遵循该路线并将此类添加到我的项目中吗?

org.apache.wink.test.diff.DiffWithAttributeQualifier 

的念头闪过我的脑海里把节点分成的NodeList,然后用org.custommonkey.xmlunit.compareNodeList但感觉就像是一个黑客。有没有比这更好的方法?

回答

3

使用XPath测试会不会更容易?我想象这样的工作

//select all elements which don't have a type attribute 
String xpath = "//result[not(@type)]"; 
assertXpathsEqual(xpath, file1sub, xpath, file1sub2) 
+0

看起来像答案,只要assertXpathsEqual能够得到一个NodeList而不只是一个节点。我会试试看。非常感谢这个想法。 – djangofan 2009-12-05 04:41:17

+0

谢谢!这工作:String xpath =“// result [not(@type)]”; assertXpathsEqual(xpath,file1sub,xpath,file2sub); – djangofan 2009-12-05 04:56:54