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();
}
}