思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

Java中合并XML文档的设计与实现

来源:网络    更新时间:2014-12-6


  摘要:介绍了XML应用中合并XML文档的方法与应用,在基于XML的应用中,有着广泛的应用前景。

  关键词:XML文档解析器元素

  在XML应用中,最常用也最实用的莫过于XML文件的读写。由于XML语义比较严格,起始标记必须配对,所以合并XML文档并不像合并普通文件那样简单。在Java中,如何合并XML文档,下面介绍一种方法。

  设计思想

  应用javax.xml.parsers包中的解析器解析得到两个XML文件的根元素,再采用递归的方式逐一复制被合并文件的元素。


  实现过程

  为了读写XML文件,需要导入如下JAVA包,"//"后为注释说明,笔者的环境是JDK1.3.1,在JDK1.4.0中测试也通过。

Importjava.io.*;//Java基础包,包含各种IO操作
Importjava.util.*;//Java基础包,包含各种标准数据结构操作
Importjavax.xml.parsers.*;//XML解析器接口
Importorg.w3c.dom.*;//XML的DOM实现
importorg.apache.crimson.tree.XmlDocument;//写XML文件要用到
Importjavax.xml.transform.*;
Importjavax.xml.transform.dom.*;
Importjavax.xml.transform.stream.*;
  下面介绍合并XML文档的过程。先说明一下各个方法的作用。方法isMerging()有两个参数(分别是目标XML文件名和被合并的XML文件名),调用JAVA的解析器,获得两个要合并的XML文档的Document结构和根元素,并调用方法duplicate()和方法writeTo()。当然,在XML文档的合并过程中,可以加入另外的一些判断条件,比如,当被合并XML文档不存在时,将如何处理,等等。

PrivateBooleanisMerging(StringmainFileName,StringsubFilename)throwsException{
 BooleanisOver=false;
 DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
 DocumentBuilderdb=null;
 Try{
  Db=dbf.newDocumentBuilder();
 }Catch(ParserConfigurationExceptionpce){
  System.err.println(pce);//出现异常时,输出异常信息
 }
 Documentdoc_main=null,doc_vice=null;
 //获取两个XML文件的Document。
 Try{
  Doc_main=db.parse(mainFileName);
  Doc_vice=db.parse(subFilename);
 }Catch(DOMExceptiondom){
  System.err.println(dom.getMessage());
 }Catch(Exceptionioe){
  System.err.println(ioe);
 }
 //获取两个文件的根元素。
 Elementroot_main=doc_main.getDocumentElement();
 Elementroot_vice=doc_vice.getDocumentElement();
 //下面添加被合并文件根节点下的每个元素
 NovelistmessageItems=root_vice.getChildNodes();
 Intitem_number=messageItems.getLength();
 //如果去掉根节点下的第一个元素,比如<所属管理系统>,那么i从3开始。否则i从1开始。
 For(inti=1;i<item_number;i=i 2){
  //调用dupliate(),依次复制被合并XML文档中根节点下的元素。
  ElementmessageItem=(Element)messageItems.item(i);
  IsOver=dupliate(doc_main,root_main,messageItem);
 }
 //调用writeTo(),将合并得到的Document写入目标XML文档。
 BooleanisWritten=writeTo(doc_main,mainFileName);
 ReturnisOver&&isWritten;
}
  方法dupliate()有三个参数(分别是目标XML文档的Document,目标XML文档中要添加节点的父节点和被合并XML文档的复制节点),采用递归的形式,将一个XML文档中的元素复制到另一个XML文档中。

PrivateBooleandupliate(Documentdoc_dup,Elementfather,Elementson)throwsException{
 Booleanisdone=false;

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018