考虑:
<ParentTag>
<Firstchild ID="id1" Title="title1">
<secondchild ID="" Title="">
<TagOfInterest ID="value1" Title=""/>
<TagOfInterest ID="value2" Title=""/>
<TagOfInterest ID="value3" Title=""/>
</secondchild>
</Firstchild>
</ParentTag>
和
<secondxml>
<something ID="id1" Title="title1">
<anotherthing ID="" Title="">
<TagOfInterest ID="value1" Title=""/>
<TagOfInterest ID="dinosaur" Title=""/>
<TagOfInterest ID="nomore" Title=""/>
</anotherthing>
</something>
</secondxml>
我正在使用XML Unit,
要求1:比较引擎应比较仅标签名称&#34; tagofInterest&#34;。
要求2:如果存在差异,则在该标记内,按属性进行比较。
仅打印标签名称的实施,但没有对感兴趣的标签或其内的属性进行大量控制。使用XML Unit的方式有什么更好的建议吗?
fr1 = new FileReader(expectedXML);
fr2 = new FileReader(actualXML);
Diff diff = new Diff(fr1, fr2);
DetailedDiff detDiff = new DetailedDiff(diff);
detDiff.overrideMatchTracker(new MatchTrackerImpl());
detDiff.overrideElementQualifier(new ElementNameQualifier());
detDiff.getAllDifferences();
class MatchTrackerImpl implements MatchTracker {
public void matchFound(Difference difference) {
if (difference != null) {
NodeDetail controlNode = difference.getControlNodeDetail();
NodeDetail testNode = difference.getTestNodeDetail();
System.out.println(printNode(controlNode.getNode()));
System.out.println(printNode(testNode.getNode()));
}
}
private static String printNode(Node node) {
if (node != null && node.getNodeType() == Node.ELEMENT_NODE) {
StringWriter sw = new StringWriter();
try {
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.transform(new DOMSource(node), new StreamResult(sw));
} catch (TransformerException te) {
System.out.println("nodeToString Transformer Exception");
}
return sw.toString();
}
return null;
}
}
答案 0 :(得分:0)
从您的示例中我了解到“tagofInterest”显示为forrest的一部分,而不是文档中的单个元素树。否则,您可以使用XMLUnit 2.x并仅将DifferenceEngine
应用于感兴趣的Element
。
XMLUnit中没有内置方法,您必须提供自己的XMLUnit扩展点之一的实现。
您正在寻找的界面是XMLUnit 1.x中的DifferenceListener
和2.x中的DifferenceEvaluator
。那些负责确定是否应报告发动机检测到的差异(如果是,则报告的严重程度)。
您可以提供自己的实现,降低为未命名为“tagofInterest”的节点检测到的所有差异。如果您对“tagofInterest”的孩子感兴趣,它可能会变得有点复杂,因为您需要前往查看是否存在“tagofInterest”父母。