通过跳过某些TAG的一些属性,使用XMLUnit比较两个XML

时间:2016-09-22 09:36:28

标签: java xml xmlunit

我从最近几天开始研究这个java API(XMLUuit.jar)。 我想通过使用XMLUnit API跳过XML标记的一些参数来比较两个XML文件。

<emp>
  <name id="1">xyz</name>
</emp>
<emp>
  <name id="2">xyz</name>
</emp>

如果我跳过id属性的比较,这两个文件是相同的。 我有一些情况需求是这样的。 任何建议????

1 个答案:

答案 0 :(得分:0)

为了抑制某些差异,您实施了DifferenceEvaluator

import org.w3c.dom.Attr;
import org.xmlunit.builder.DiffBuilder;
import org.xmlunit.diff.*;
import org.xmlunit.util.Nodes;

public class AttributesTest {

    public static void main(String[] args) {
        Diff d = DiffBuilder.compare("<emp>\n" +
                                     "  <name id=\"1\">xyz</name>\n" +
                                     "</emp>")
            .withTest("<emp>\n" +
                      "  <name id=\"2\">xyz</name>\n" +
                      "</emp>")
            .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))
            .withDifferenceEvaluator((comparison, outcome) -> {
                    if (outcome != ComparisonResult.EQUAL && comparison.getType() == ComparisonType.ATTR_VALUE) {
                        Attr a = (Attr) comparison.getControlDetails().getTarget();
                        if ("id".equals(Nodes.getQName(a).getLocalPart())
                            && "name".equals(Nodes.getQName(a.getOwnerElement()).getLocalPart())) {
                            return ComparisonResult.EQUAL;
                        }
                    }
                    return outcome;
                })
            .build();
        System.err.println("Differences? " + d.hasDifferences());
    }

}