我的Java EE应用程序中有一个案例,比如我需要比较两个大的自动生成的XML。我只需要检查两个XML是否相等(标签和值)。
我尝试使用XMLUnit
,但事情就像返回false
一样,即使标签之间有空格(这些XML是自动生成的!)。有没有有效的方法来做到这一点或写下我们自己的逻辑?
答案 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);
这应该适用于现在。