[英]Comparing two xml files using JAVA
我要xml文件说abc.xml和123.xml几乎相似,我的意思是有相同的内容,但第二个,即123.xml的内容比前一个更多。 我想用Java读取这两个文件,并比较每个标记的abc.xml中的内容是否与123.xml中的内容相同,类似于对象比较。 请建议我如何使用java读取xml文件并开始比较。
谢谢。
如果你只是想比较那么使用这个:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setCoalescing(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setIgnoringComments(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc1 = db.parse(new File("file1.xml"));
doc1.normalizeDocument();
Document doc2 = db.parse(new File("file2.xml"));
doc2.normalizeDocument();
Assert.assertTrue(doc1.isEqualNode(doc2));
我会选择XMLUnit 。 它提供的功能:
祝好运!
我将使用JAXB从XML文件生成Java对象,然后比较Java文件。 他们会使处理更容易。
好吧,如果你只想比较和显示,那么你可以使用Guiffy
这是一个很好的工具。 如果你想在后端进行处理,那么你必须使用DOM解析器将两个文件加载到2个DOM对象并按属性进行比较。
正确的方法取决于两个因素:
(a)您想要对比较进行多少控制? 例如,您是否需要控制空格是否重要,是否应忽略注释,是否应忽略名称空间前缀,是否应忽略冗余名称空间声明,是否应忽略XML声明?
(b)你想要什么答案? (i)布尔:相同/不同,(ii)适合人类处理的差异列表,(iii)适合于应用程序处理的差异列表。
我使用的两种技术是:(a)将两个文件转换为Canonical XML,然后比较字符串。 这给出了很少的控制,只给出了一个布尔结果。 (b)使用XPath 2.0 deep-equal()函数或扩展Saxon版本saxon比较两棵树:deep-equal()。 Saxon版本可以更好地控制比较的方式,并提供更详细的差异报告(供人阅读,不适用于应用)。
如果您想编写Java代码,您当然可以实现自己的比较逻辑 - 例如,您可以找到XPath深度相等的开源实现,并对其进行修改以满足您的要求。 它只有大约一百行代码。
这有点矫枉过正,但如果您的XML有架构,您可以将其转换为EMF元模型,然后使用EMF比较进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.