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<Integer,String> 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<Integer,String> executeCompare(Document sourceDoc, Document targetDoc) { //该标签用于限定范围 String topTag = "web-app"; Map<Integer,String> resultMap = new HashMap<Integer,String>(); 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<sourceList.getLength();i++) { sourceEleValue = getElementValue(sourceDoc,"param-name",i); targetEleValue = getElementValue(targetDoc,"param-name",i); if(!sourceEleValue.equals(targetEleValue)) { resultMap.put(new Integer(i),"源文件当前值为:" +sourceEleValue +"--目标文件当前值为:" +targetEleValue); } } } return resultMap; } private String getElementValue(Document doc,String tagName,int index) { return doc.getElementsByTagName(tagName).item(index).getFirstChild().getNodeValue().trim(); } }