我的 Java EE 应用程序中有一个案例,比如我需要比较两个自动生成的大型 XML。我只需要检查两个 XML 是否相等(标签和值)。
我尝试使用XMLUnit
,但false
即使标签之间有空格,它也会返回(这些 XML 是自动生成的!)。有什么有效的方法可以做到这一点或写下我们自己的逻辑吗?
我的 Java EE 应用程序中有一个案例,比如我需要比较两个自动生成的大型 XML。我只需要检查两个 XML 是否相等(标签和值)。
我尝试使用XMLUnit
,但false
即使标签之间有空格,它也会返回(这些 XML 是自动生成的!)。有什么有效的方法可以做到这一点或写下我们自己的逻辑吗?
我会建议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;
}
使用 jaxb 通过解析将 xml 转换为 POJO
在上面的 POJO 中实现 object.equals()
然后使用 Comparator 比较解析的对象
您可以使用带有内置差异工具的编辑器。我使用 netbeans 编辑器来比较文件。我发现它又快又容易。
您可以尝试:
XMLUnit.setIgnoreWhitespace(Boolean.TRUE);
XMLUnit.setNormalizeWhitespace(Boolean.TRUE);
现在应该可以了。