作者:Larry_He | 来源:互联网 | 2017-05-14 02:24
方法一:Dom4J处理XMLimportjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importor
方法一:
Dom4J处理XMLimport 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
方法二:
import java.io. *; //Java基础包,包含各种IO操作
import java.util. *; //Java基础包,包含各种标准数据结构操作
import javax.xml.parsers. *; //XML解析器接口
import org.w3c.dom. *; //XML的DOM实现
import javax.xml.transform. *;
import javax.xml.transform.dom. *;
import javax.xml.transform.stream. *;
/**
* XML文件合并工具类
* @author GhostFromHeaven
*/
public class XMLMergeUtil {
/**
* XML文件的合并处理
* @param mainFileName 待合并处理的xml文件,合并后将更新此文件
* @param subFilename 被合并的xml文件
* @return 合并成功返回true,否则返回false
* @throws Exception
*/
public static boolean isMerging(String mainFileName, String subFilename)
throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce); // 出现异常时,输出异常信息
}
Document doc_main = null;
Document doc_vice = null;
// 获取两个XML文件的Document
try {
doc_main = db.parse(mainFileName);
doc_vice = db.parse(subFilename);
} catch (DOMException dom) {
System.err.println(dom.getMessage());
} catch (Exception ioe) {
System.err.println(ioe);
}
// 获取两个文件的根节点
Element root_main = doc_main.getDocumentElement();
Element root_vice = doc_vice.getDocumentElement();
// 下面添加被合并文件根节点下的每个节点
NodeList messageItems = root_vice.getChildNodes();
int item_number = messageItems.getLength();
// 如果去掉根节点下的第一个节点,那么i从3开始,否则i从1开始
for (int i = 1; i 以上就是Android开发中关于2个Xml合并问题的实例详解的详细内容,更多请关注 第一PHP社区 其它相关文章!