Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个xml_Java_Xml_Xml Parsing_Comparison_Xmlunit - Fatal编程技术网

Java 比较两个xml

Java 比较两个xml,java,xml,xml-parsing,comparison,xmlunit,Java,Xml,Xml Parsing,Comparison,Xmlunit,我在JavaEE应用程序中有一个例子,比如我需要比较两个大型自动生成的XML。我只需要检查两个XML是否相等(标记和值) 我试着使用XMLUnit,但它返回false,即使标记之间有空格(这些xml是自动生成的!)。有什么有效的方法可以做到这一点,或者写下我们自己的逻辑吗?使用jaxb通过解析将xml转换为POJO 在上面的POJO中实现object.equals() 然后使用Comparator比较解析的对象,您可以使用带有内置差异工具的编辑器。我使用netbeans编辑器来区分比较文件。我觉

我在JavaEE应用程序中有一个例子,比如我需要比较两个大型自动生成的XML。我只需要检查两个XML是否相等(标记和值)


我试着使用
XMLUnit
,但它返回
false
,即使标记之间有空格(这些xml是自动生成的!)。有什么有效的方法可以做到这一点,或者写下我们自己的逻辑吗?

使用jaxb通过解析将xml转换为POJO

在上面的POJO中实现object.equals()


然后使用Comparator比较解析的对象,您可以使用带有内置差异工具的编辑器。我使用netbeans编辑器来区分比较文件。我觉得它又快又简单。

我建议斯塔克斯。最好使用大文件。可能是这样的

private boolean compare(XMLEventReader xr1, XMLEventReader xr2) throws XMLStreamException {
    for (;;) {
        XMLEvent e1 = nextTag(xr1);
        XMLEvent e2 = nextTag(xr2);
        if (e1 == null || e2 == null) {
            return e1 == e2;
        }
        if (!equals(e1, e2)) {
            return false;
        }
    }
}

private static XMLEvent nextTag(XMLEventReader xr) throws XMLStreamException {
    while (xr.hasNext()) {
        XMLEvent e = xr.nextEvent();
        if (e.getEventType() == XMLStreamConstants.START_ELEMENT) {
            return e;
        }
    }
    return null;
}

private boolean equals(XMLEvent e1, XMLEvent e2) {
    // compare attributes and content
    return false;
}
您可以尝试以下方法:

setIgnoreWhitespace(Boolean.TRUE)

setNormalizeWhitespace(Boolean.TRUE)

现在应该可以了