java - 比较两个 XML

标签 java xml xml-parsing comparison xmlunit

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

关于java - 比较两个 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14769776/

相关文章:

java - 如何在使用 com.sun.org.apache.xerces.internal.parsers.SAXParser 的 SAXBuilder 中禁用 XML 外部实体 (XEE) 处理

java - 如何获取 xml 中父标签内标签名称及其值的数据

java - 极长的 GC 时间

java - 如果 JPanel 大于其父级,则调整其大小

C# 通过预加载来优化函数

html - escapeXml 和 escapeHtml 有什么区别?

mysql - 将 MySQL 数据库和 XML 混合处理成 Solr 索引

java - 使用 gm4java 在单个进程中进行多个图像操作

Java MySQL IndexOutOfBounds 错误

xml - 使用 Saxon 9.6HE 自动执行多个文件的 xquery