package com.xml;public class XMLParseTest { public static void main(String args[]) { String sourcePath = "c:/web.xml"; String targetPath = "c:/web1.xml"; IXMLCompare xmlCompare = new XMLCompare(); xmlCompare.compare(sourcePath, targetPath); }}
package com.xml;public interface IXMLCompare { void compare(String sourcePath,String targetPath);}
package com.xml;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class XMLCompare implements IXMLCompare{ private DocumentBuilderFactory factory; private DocumentBuilder builder; public XMLCompare() { factory = DocumentBuilderFactory.newInstance(); try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } @Override public void compare(String sourcePath, String targetPath) { File sourceFile = new File(sourcePath); File targetFile = new File(targetPath); try { Document sourceDoc = builder.parse(sourceFile); Document targetDoc = builder.parse(targetFile); Map result = executeCompare(sourceDoc,targetDoc); if(result.isEmpty()) { System.out.println("两个XML文件内容相同!"); } else { System.out.println("两个XML文件的内容不同!"); for(Integer element: result.keySet()) { System.out.println("number"+element+":"+result.get(element)); } } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private Map executeCompare(Document sourceDoc, Document targetDoc) { //该标签用于限定范围 String topTag = "web-app"; Map resultMap = new HashMap (); NodeList sourceList = sourceDoc.getElementsByTagName(topTag); NodeList targetList = targetDoc.getElementsByTagName(topTag); String sourceEleValue; String targetEleValue; if(sourceList.getLength()!=targetList.getLength()) { System.out.println("这两个XML对比的内容长度不同!"); } else { for(int i=0;i