两个xml的合并

package com.robotji.util;

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

}

//测试用的2个xml如下:

a.xml

[转载]Dom4J处理XML,合并2个Xml
b.xml
[转载]Dom4J处理XML,合并2个Xml

阅读更多
换一批

没有更多推荐了,返回首页