2012-04-26 45 views
4


元素,我有以下testXML寻找失踪使用XMLUnit

<root> 
    <a>test</a> 
    <b>bee</b> 
    <d/> 
</root> 

虽然templateXML看起来像这样

<root> 
    <a/> 
    <b/> 
    <c/> 
    <d> 
    <e/> 
    </d> 
</root> 

我想XMLUnit测试返回缺少的元素,在这种情况下, 'C'和 'e' 的丢失

/根[1]/C [1]缺少
/根[1]/d [1]/E [1]缺少

我的代码看起来是这样的

public static ArrayList<Difference> testCompareToSkeletonXML(String xml, String template) throws Exception { 

    XMLUnit.setCompareUnmatched(false); 
    XMLUnit.setIgnoreAttributeOrder(true); 
    XMLUnit.setIgnoreComments(true); 
    XMLUnit.setIgnoreWhitespace(true); 
    XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);  

    DifferenceListener myDifferenceListener = new IgnoreTextAndAttributeValuesDifferenceListener(); 
    DetailedDiff myDiff = new DetailedDiff(new Diff(template, xml)); 
    // myDiff.overrideDifferenceListener(myDifferenceListener); 
    myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier()); 
    ArrayList<Difference> returnList = new ArrayList<Difference>(); 
    List<Object> allDifferences = myDiff.getAllDifferences(); 
    for(Object obj: allDifferences){ 
     Difference dif = (Difference) obj;   
     if(dif.getTestNodeDetail().getNode()== null){ 
      //returnList.add(dif);   
      System.out.println(dif.getControlNodeDetail().getXpathLocation()); 
     } 
    } 
    return returnList; 
} 

输出产生看起来像这样

/根[1]/A [1]
/根[1]/B [1 ]
/根[1]/C [1]
/根[1]/d [1]

感谢您的帮助
--SD

+0

是什么问题? – 2012-05-05 22:35:52

+0

这是问题,我想XMLUnit返回丢失的元素,在这种情况下'c'和'e'丢失 /root [1]/c [1]丢失 /root [1]/d [ 1]/e [1]丢失 – SDS 2012-06-12 16:00:58

回答

2

如果元素名称和嵌套文本相同,您告诉XMLUnit仅匹配元素。 ab元素(它们在嵌套文本中有所不同)不是这种情况,这就是为什么您在列表中看到它们的原因。

你看d而非嵌套e作为顶级d由于按RecursiveElementNameAndTextQualifier的规则是不同的。如果您删除线设置RecursiveElementNameAndTextQualifier列表减少到

/root[1]/c[1] 
/root[1]/d[1]/e[1] 

这是您所期望的东西。