Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 380|回复: 0

[xml学习]用JDOM把多个XML文件合并生成一个Document对象

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 01:57:51 | 显示全部楼层 |阅读模式
    通常一些应用框架都会用 XML 作为配置,而且很多都支持多个 XML 文件,例如 Struts 框架可以配置多个 struts-config-xxx.xml 文件,Spring 也允许你用多个 applicationContext-xxx.xml 文件,再比如 DWR 也是可以由多个 dwr-xxx.xml 依功能或其他方式分开来配置。

          我们知道,这样的多个 XML 有相同的规范定义,那么程序如何一并解析它们呢?我看过 ActionServlet 是对 struts-config-xxx.xml 逐个解析的。我这里介绍的一种方法是把那些有着相同规范定义的 XML 合成一个 Document 然后对这个 Document 对象进行处理,如 XPath 查找、进行 DOM 对象操作,就不需要每次到多个 Document 中去查找一遍。

         众所周知,对 XML 的操作有两种方式,DOM:XML 映射在内存中一颗树;SAX:基于事件的方式。常用的 XML java 解析组件有 DOM4J(Apache的)、JDOM、和JAXP(Sun的),它们都提供了 DOM 和 SAX 实现和 Xpath 查找。

       
      
       
       
         
       

         
       
      
       下面我就介绍用 JDOM 完成对多个 XML 文件进行合并得到一个 Document 对象,实现代码如下:
    1. /*   
    2. * Created on Sep 23, 2007   
    3. */   
    4.    
    5. import java.io.*;
    6. import java.util.List;   
    7.    
    8. import org.jdom.Document;   
    9. import org.jdom.Element;   
    10. import org.jdom.JDOMException;   
    11. import org.jdom.input.SAXBuilder;   
    12. import org.jdom.output.*;
    13.    
    14. /**   
    15. * Combine two or more XML together as one document   
    16. * I put this operation into main method.   
    17. * @author Unmi   
    18. */   
    19. public class CombineXML   
    20. {   
    21.    
    22.     /**   
    23.      * @param args   
    24.      * @throws Exception   
    25.      */   
    26.     public static void main(String[] args) throws Exception   
    27.     {   
    28.         Document document = null;   
    29.         try {   
    30.             SAXBuilder dbf = new SAXBuilder();   
    31.             document = (Document) dbf.build(args[0]);   
    32.             Element docRoot = document.getRootElement();   
    33.    
    34.             for (int i = 1; i < args.length; i++) {   
    35.                 Document tmpdoc = dbf.build(args[i]);   
    36.                 List nlt = tmpdoc.getRootElement().getChildren();   
    37.                 for (int j = 0; j < nlt.size(); ) {   
    38.                     Element el = (Element)nlt.get(0);   
    39.                     // get free element   
    40.                     el.detach();   
    41.                     docRoot.addContent(el);   
    42.                 }   
    43.             }   
    44.         } catch (IOException e) {   
    45.             throw new Exception("File not readable.");   
    46.         } catch (JDOMException e) {   
    47.             throw new Exception("File parsed error.");   
    48.         }   
    49.             
    50.         //TODO, You can process that document now.  
    51.       Format f=Format.getRawFormat();
    52.       f.setEncoding("gb2312");
    53.       f.setIndent("  ");//每一层元素缩排两格
    54.                   
    55.       XMLOutputter XMLOut = new XMLOutputter(f);
    56.       XMLOut.output(document, new FileOutputStream("test1.xml"));   

    57.     }   
    58. }  
    复制代码
        研究这个的目的是,我想做一个工具合并多个 Struts-config 配置文件,然后输入 nath、nction、norward、name 或 type 等中的一个属性值查找到相关的其他属性值,这样能方便程序调试,比如看到哪个 aciton.do 就知道会转向到哪些个页面,附着了哪个 formbean,以及其他相关的属性值是什么。


      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/10/015751625.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 17:45 , Processed in 0.384229 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表