方法一:Dom4J处理XML
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
* 合并并输出2个xml文档,所需要jar:dom4j-1.6.1.jar,jaxen-1.1.1.jar
* 将某个xml文档的某个标签下或该标签上一级下所有内容插入到另一个xml文档的某个标签下
* @date 2011-04-13
* @author RobotJi
* @version 1.0
public class UniteXML {
public UniteXML() {}
* 根据is获取doc,这里的is可以是本地流或者网络流
* @param is
* @return
public static Document getDocument(InputStream is){
Document doc=null;
try {
doc=new SAXReader().read(is);
} catch (DocumentException e) {
e.printStackTrace();
}
return doc;
}
public static InputStream getInputStream(String path){
File f=new File(path);
if(!f.exists()){
return null;
}
InputStream is=null;
try {
is = new FileInputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return is;
}
* 获取子Element
* @param doc 要获取的文档
* @param tagName 文档对应的标签
* @return
public Element getSubElement(Document doc,String tagName){
Element el=(Element)doc.selectSingleNode("//"+tagName);
return el;
}
* 输出xml文档
* @param doc 要输出的文档
* @param fileName 路径
public void writeXML(Document doc,String fileName){
try {
XMLWriter writer=new XMLWriter(new FileWriter(fileName));
writer.write(doc);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
* 合并doc
* @param path1 主文档
* @param path2 被合并的文档
* @param tagName1 在主文档中要插入的标签
* @param tagName2 被合并文档的标签
* @param isContain 是否包含被合并文档标签的上一级标签下的所有结点
* @return
public Document unitXMl(String path1,String path2,String tagName1,String tagName2,boolean isContain){
Document doc1=getDocument(getInputStream(path1));
Document doc2=getDocument(getInputStream(path2));
Element elSub2=getSubElement(doc2,tagName2);
Element elSub1=getSubElement(doc1,tagName1);
if(isContain){
// doc1.getRootElement().appendContent(elSub2.getParent());//直接插入的根标签下
elSub1.appendContent(elSub2.getParent());//插入到tagName1标签下
}else{
// doc1.getRootElement().appendContent(elSub2);
elSub1.appendContent(elSub2);
}
return doc1;
}
public static void main(String[] args) {
UniteXML ux=new UniteXML();
//将c标签下所有内容插入到aa标签下,若参数设为true则可将c标签上一级下的所有内容插入到aa标签下
Document doc=ux.unitXMl("F:\\test\\a.xml", "F:\\test\\b.xml", "aa", "c", false);
ux.writeXML(doc, "F:\\test\\a_test.xml");
}
}