0

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

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

4

4 回答 4

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;
}
于 2013-02-08T11:32:56.753 回答
0

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

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

然后使用 Comparator 比较解析的对象

于 2013-02-08T09:58:54.083 回答
0

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

于 2013-02-08T10:11:47.760 回答
0

您可以尝试:

XMLUnit.setIgnoreWhitespace(Boolean.TRUE);

XMLUnit.setNormalizeWhitespace(Boolean.TRUE);

现在应该可以了。

于 2013-05-01T15:05:47.750 回答