首页 > 解决方案 > XMLUnit NodeFilter 没有发现差异

问题描述

比较两个简单的 XML 并希望比较具有特定 localName 的节点。仅在这种情况下flowerA。当我使用不等于时,flowerB它给了我flowerA节点的差异,当我说等于时,flowerA它没有任何差异?

    public class XMLDiff {
        public static void main(String[] args) {
            String controlXml = "<flowers><flowerA>Rose</flowerA><flowerB>Daisy</flowerB></flowers>";
            String testXml =    "<flowers><flowerA>Roses</flowerA><flowerB>Daisies</flowerB></flowers>";

            Diff build = DiffBuilder.compare(controlXml).withTest(testXml)
                    .ignoreWhitespace()
                    .withNodeFilter(node -> !node.getNodeName().equals("flowerB"))
                    .build();
            System.out.println(build.getDifferences());
        }
    }
[Expected text value 'Rose' but was 'Roses' - comparing <flowerA ...>Rose</flowerA> at /flowers[1]/flowerA[1]/text()[1] to <flowerA ...>Roses</flowerA> at /flowers[1]/flowerA[1]/text()[1] (DIFFERENT)]
    public class XMLDiff {
        public static void main(String[] args) {
            String controlXml = "<flowers><flowerA>Rose</flowerA><flowerB>Daisy</flowerB></flowers>";
            String testXml =    "<flowers><flowerA>Roses</flowerA><flowerB>Daisies</flowerB></flowers>";

            Diff build = DiffBuilder.compare(controlXml).withTest(testXml)
                    .ignoreWhitespace()
                    .withNodeFilter(node -> node.getNodeName().equals("flowerA"))
                    .build();
            System.out.println(build.getDifferences());
        }
    }
[]

标签: xmlunit-2

解决方案


您的根元素flowers与 the 不匹配,NodeFilter因此您最终什么都没有比较。

NodeFilter最适合您不想比较的节点的拒绝列表。在您的情况下,您需要确保您还允许在遍历您感兴趣的节点时遇到的所有节点。


推荐阅读