比较两个XML

时间:2013-02-08 09:49:26

标签: java xml xml-parsing comparison xmlunit

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

我尝试使用XMLUnit,但事情就像返回false一样,即使标签之间有空格(这些XML是自动生成的!)。有没有有效的方法来做到这一点或写下我们自己的逻辑?

4 个答案:

答案 0 :(得分:1)

我会建议StAX。最好使用大文件。这可能就像这样

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;
}

答案 1 :(得分:0)

使用jaxb

解析将xml转换为POJO

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

然后使用Comparator

比较解析的对象

答案 2 :(得分:0)

您可以使用带有内置差异工具的编辑器。我使用netbeans编辑器来比较文件。我发现它快速而简单。

答案 3 :(得分:0)

您可以尝试:

XMLUnit.setIgnoreWhitespace(Boolean.TRUE);

XMLUnit.setNormalizeWhitespace(Boolean.TRUE);

这应该适用于现在。