`
lzth
  • 浏览: 138583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应用dom4j读取xml范例

阅读更多
最近在研究开源软件“局域网聊天工具 Net-C”,项目主页为http://dgtalize.com/products/netc,里面有几段代码是用dom4j来读写xml文件的,本人使用较新的dom4j2.0改写了其中的这段代码。

xml文件为:

config.xml
 1. <?xml version="1.0" encoding="UTF-8"?> 
   2. <!-- 
   3.     Document   : config.xml 
   4.     Created on : 19 de marzo de 2008, 22:37 
   5.     Author     : Diego 
   6.     Description: Configuration file por Net-C 
   7. --><config> 
   8.     <param> 
   9.         <name>ipBroadcast</name> 
  10.         <value>192.168.255.255</value> 
  11.     </param> 
  12.     <param> 
  13.         <name>portBroadcast</name> 
  14.         <value>41516</value> 
  15.     </param> 
  16.     <param> 
  17.         <name>portPrivateChat</name> 
  18.         <value>41518</value> 
  19.     </param> 
  20.     <param> 
  21.         <name>nickname</name> 
  22.         <value>robbie</value> 
  23.     </param> 
  24.     <param> 
  25.         <name>trayMsgUserLogged</name> 
  26.         <value>true</value> 
  27.     </param> 
  28.     <param> 
  29.         <name>trayMsgUserLoggedOff</name> 
  30.         <value>false</value> 
  31.     </param> 
  32.     <param> 
  33.         <name>trayMsgPrivateMsg</name> 
  34.         <value>true</value> 
  35.     </param> 
  36.     <param> 
  37.         <name>useNativeUI</name> 
  38.         <value>true</value> 
  39.     </param> 
  40.     <param> 
  41.         <name>startMinimized</name> 
  42.         <value>false</value> 
  43.     </param> 
  44. </config> 

得到上述xml文档的Document对象的代码为
 1. private Document getConfigDocument() throws Exception { 
   2.         if (configDoc == null) { 
   3.             File cfgFile = new File(filePath); 
   4.             if (!cfgFile.exists()) { 
   5.  
   6.                 cfgFile.createNewFile(); 
   7.                 try { 
   8.                     //FileInputStream fis = new FileInputStream(cfgFileOrig); 
   9.                     InputStream fis = getClass().getResourceAsStream("/com/dgtalize/netc/business/config.xml"); 
  10.                     FileOutputStream fos = new FileOutputStream(cfgFile); 
  11.                     byte[] buf = new byte[1024]; 
  12.                     int readCant = 0; 
  13.                     while ((readCant = fis.read(buf)) != -1) { 
  14.                         fos.write(buf, 0, readCant); 
  15.                     } 
  16.                     fis.close(); 
  17.                     fos.close(); 
  18.                 } catch (Exception ex) { 
  19.                     cfgFile.delete(); 
  20.                     throw ex; 
  21.                 } 
  22.             } 
  23.  
  24.             SAXReader reader = new SAXReader(); 
  25.             configDoc = reader.read(new File(filePath)); 
  26.             configDoc.normalize(); 
  27.         } 
  28.         return configDoc; 
  29.     } 

读取里面的参数(param)元素到变量的代码为:
  1. public void readConfigFile() throws Exception { 
   2.         configDoc = getConfigDocument(); 
   3.         Element rootElement = configDoc.getRootElement(); 
   4.         Iterator<Element> it = rootElement.elementIterator("param"); 
   5.         while (it.hasNext()) { 
   6.             Element element = it.next(); 
   7.             String name = element.elementIterator("name").next().getTextTrim(); 
   8.             String value = element.elementIterator("value").next().getTextTrim(); 
   9.             if (name.equalsIgnoreCase("ipBroadcast")) { 
  10.                 ipBroadcast = value; 
  11.             } else if (name.equalsIgnoreCase("portBroadcast")) { 
  12.                 portBroadcast = Integer.parseInt(value); 
  13.             } else if (name.equalsIgnoreCase("nickname")) { 
  14.                 nickname = value == null ? "" : value; 
  15.             } else if (name.equalsIgnoreCase("portPrivateChat")) { 
  16.                 portPrivateChat = Integer.parseInt(value); 
  17.             } else if (name.equalsIgnoreCase("trayMsgUserLogged")) { 
  18.                 trayMsgUserLogged = Boolean.parseBoolean(value); 
  19.             } else if (name.equalsIgnoreCase("trayMsgPrivateMsg")) { 
  20.                 trayMsgPrivateMsg = Boolean.parseBoolean(value); 
  21.             } else if (name.equalsIgnoreCase("trayMsgUserLoggedOff")) { 
  22.                 trayMsgUserLoggedOff = Boolean.parseBoolean(value); 
  23.             } else if (name.equalsIgnoreCase("useNativeUI")) { 
  24.                 useNativeUI = Boolean.parseBoolean(value); 
  25.             } else if (name.equalsIgnoreCase("startMinimized")) { 
  26.                 startMinimized = Boolean.parseBoolean(value); 
  27.             } 
  28.         } 
  29.  
  30.     } 

根据里面的私有变量保存xml文件的代码为:

 1. public void saveConfigFile() throws Exception { 
   2.         Document configDocForSave = getConfigDocument(); 
   3.  
   4.         Element rootElement = configDocForSave.getRootElement(); 
   5.         Iterator<Element> it = rootElement.elementIterator("param"); 
   6.         while (it.hasNext()) { 
   7.             Element element = it.next(); 
   8.             Element nextName = element.elementIterator("name").next(); 
   9.             String name = nextName.getTextTrim(); 
  10.             Element nextValue = element.elementIterator("value").next(); 
  11.             String value = nextValue.getTextTrim(); 
  12.             if (name.equalsIgnoreCase("ipBroadcast")) { 
  13.                 nextValue.setText(ipBroadcast); 
  14.             } else if (name.equalsIgnoreCase("portBroadcast")) { 
  15.                 nextValue.setText(String.valueOf(portBroadcast)); 
  16.             } else if (name.equalsIgnoreCase("nickname")) { 
  17.                 nextValue.setText(nickname); 
  18.             } else if (name.equalsIgnoreCase("portPrivateChat")) { 
  19.                 nextValue.setText(String.valueOf(portPrivateChat)); 
  20.             } else if (name.equalsIgnoreCase("trayMsgUserLogged")) { 
  21.                 nextValue.setText(String.valueOf(trayMsgUserLogged)); 
  22.             } else if (name.equalsIgnoreCase("trayMsgPrivateMsg")) { 
  23.                 nextValue.setText(String.valueOf(trayMsgPrivateMsg)); 
  24.             } else if (name.equalsIgnoreCase("trayMsgUserLoggedOff")) { 
  25.                 nextValue.setText(String.valueOf(trayMsgUserLoggedOff)); 
  26.                 trayMsgUserLoggedOff = Boolean.parseBoolean(value); 
  27.             } else if (name.equalsIgnoreCase("useNativeUI")) { 
  28.                 nextValue.setText(String.valueOf(useNativeUI)); 
  29.             } else if (name.equalsIgnoreCase("startMinimized")) { 
  30.                 nextValue.setText(String.valueOf(startMinimized)); 
  31.             } 
  32.         } 
  33.         XMLWriter writer = new XMLWriter(new FileWriter(filePath)); 
  34.         writer.write(configDocForSave); 
  35.         writer.close(); 
  36.  }


 
分享到:
评论

相关推荐

    java 通过dom4j操作 xml

    java 通过dom4j操作 xml,含范例和源码

    《JavaScript+DHTML语法与范例详解词典》源码

    XMLDOM的相关知识,以及如何通过JavaScript XML DOM对象来读取XML文件的数据,并添加、修改、删除XML文件元素。同时,《JavaScript+DHTML语法与范例详解词典》还讲解AJAX技术的用法,AJAX的定义、语法、功能和执行...

    用XML轻松开发WEB站点

    第四部分(XML高阶),内容包括:XML在数据库中的应用,XML中的矢量图形处理技术,WML——无线接入的XML,XML与Java;第五部分(基于XML的Web站点应用与开发),内容包括:WIDL自动控制Web站点,频道定义格式推送...

    XML高级编程

    所以XML作为数据的这条主线包括:第6章:SAX:XML的简单API 第7章:命名空间和模式第8章:链接和查询第9章:操作XML 第10章:XML和数据库第11章:服务器到服务器第12章:电子商务第14章:WAP和WML 3. XML的可视化...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    XML创建了标识,而DOM的作用就是告诉script如何在浏览器窗口中操作和显示这些标识 上面我们已经简要的讲述了一些XML的基本原理,我们来看看它们之间的关联以及它们是如何工作的,先看这里一张图: 1.XML描述...

    用XML轻松开发WEB站点(PDF)

    第四部分(XML高阶),内容包括:XML在数据库中的应用,XML中的矢量图形处理技术,WML——无线接入的XML,XML与Java;第五部分(基于XML的Web站点应用与开发),内容包括:WIDL自动控制Web站点,频道定义格式推送Web站点...

    JavaScript王者归来part.1 总数2

     12.8.2 如何使用XML DOM--一个利用XML实现多级关联下拉选择框的例子   12.9 总结   第13章 事件处理  13.1 什么是事件   13.1.1 消息与事件响应   13.1.2 浏览器的事件驱动机制   13.2 基本事件处理  ...

    JavaScript网页特效范例宝典源码

    实例002 定时打开窗口 4 实例003 通过按钮创建窗口 5 实例004 自动关闭的广告窗口 6 实例005 控制弹出窗口居中显示 7 实例006 弹出的窗口之Cookie控制 9 实例007 为弹出的窗口加入关闭按钮 11 实例008 关闭弹出窗口...

    Ajax完全自学手册PPT和源代码(ptt格式)

    Test4IE XMLDOM.htm IE中的XML DOM支持 Test Firefox XMl DOm.htm Firefox中的XML DOM支持 Firefox LoadXML.htm Firefox中的XML DOM支持 XPath Example1.xml XPath Writer.xml 开发中实际使用的XML文档 Test4IE ...

    JAVA 范例大全 光盘 资源

    实例105 DOM4j解析XML文件 278 实例106 JDOM解析XML文件 285 实例107 DOM解析XML文件 292 实例108 SAX解析XML文件 297 实例109 W3C解析XML文件 301 第13章 Java网络编程 306 实例110 获取IP地址和域名 306 ...

    Ajax完全自学手册(源代码).rar

    Test4IE XMLDOM.htm IE中的XML DOM支持 Test Firefox XMl DOm.htm Firefox中的XML DOM支持 Firefox LoadXML.htm Firefox中的XML DOM支持 XPath Example1.xml XPath Writer.xml 开发中实际使用的XML文档 ...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf 第I部分 语言结构和环境 第1章 visual studio 2010 3 1.1 visual studio 2010:从express到ultimate的各种版本 4 1.2 visual basic的关键字和语法 7 ...

    python写入xml文件的方法

    本范例通过xml模块对xml文件进行写入操作 from xml.dom.minidom import Document doc = Document() people = doc.createElement(people) doc.appendChild(people) aperson = doc.createElement(person) people....

    JSP实例编程100例

    顺序如下: 1、多种字体大小显示 2、c:out标记输出 3、获取当前时间 4、include包含语句 5、建立错误处理页面的范例程序 6、jsp:forward 7、简单计数器 ...99、DOM读取XML文档 100、SAX读取XML文档

    开源bbs源码java-playfish:从code.google.com/p/playfish自动导出

    应用开源jar包包括httpclient(内容读取),dom4j(配置文件解析),jericho(html解析),已经在war包的lib下。 这个项目目前还很不成熟,但是功能基本都完成了。要求使用者熟悉XML,熟悉正则表达式。目前通过这个工具...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 4.1、Web容器简介 4.2、Tomcat简介 4.3、Tomcat服务器的下载及配置 ...

Global site tag (gtag.js) - Google Analytics