`
lzth
  • 浏览: 141036 次
  • 性别: 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.  }


 
分享到:
评论

相关推荐

    经典的DOM解析XML范例

    DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整的对象模型,允许开发者通过节点操作来访问和修改XML内容。而SAX则是一种基于事件的解析方法,它在读取XML时逐个处理元素,不会将...

    dom和sax读XML源码范例

    在IT行业中,XML(eXtensible ...在提供的"XMLoperater"压缩包文件中,可能包含了一个或多个与XML操作相关的类或工具,用于演示DOM和SAX的使用方法。通过学习这些代码,我们可以进一步掌握这两种解析技术的实际应用。

    DOM SAX解析XML文档的范例(工程包)

    本工程包“DOM SAX解析XML文档的范例”将帮助我们深入理解这两种解析方式。 **DOM解析:** DOM解析器将整个XML文档加载到内存中,创建一个树形结构,称为DOM树。每个XML元素、属性、文本节点等都有对应的DOM对象,...

    XML DOM教程

    DOM的核心在于它的树状结构,允许我们像遍历文件系统一样遍历和操作XML文档。 **XML DOM 节点** - **节点**:在DOM中,文档的每一个组成部分都被视为一个节点。这包括元素节点、属性节点、文本节点、注释节点等。...

    XML 精要 范例 解析封装类库

    例如,Java中的JAXB(Java Architecture for XML Binding)用于对象与XML之间的绑定,DOM4J提供DOM接口的增强,而Python的xml.etree.ElementTree是内置的XML处理模块。这些类库简化了XML处理,使得开发者无需关注...

    (这是随书附赠的光盘)HTML+XHTML+CSS+JavaScript+DOM+AJAX语法及范例实用辞典附赠光盘

    在《HTML+XHTML+CSS+JavaScript+DOM+AJAX语法及范例实用辞典》这本书的附赠光盘中,包含了从"chapter1"到"chapter5"的全部网站源码,为读者提供了丰富的学习资源。 1. **HTML(HyperText Markup Language)**:HTML...

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

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

    XML实践例子.zip

    DOM是一种编程接口,用于XML和HTML文档,它将整个文档构建成一棵树形结构,使得开发者可以方便地通过节点操作来访问和修改文档内容。 "2016112700moreData.html"可能进一步探讨了如何处理和展示XML中的大量数据,这...

    C2的特效范例(XML格式)

    本压缩包中的“C2的特效范例(XML格式)”提供了C2引擎专用的特效文件,这些文件采用XML格式,可以被C2引擎识别和执行,同时也能应用于基于JavaScript的网页游戏代码中。 XML(Extensible Markup Language)是一种...

    基于XML的通讯录

    为了更好地练习XML,向服务器接收到参数后,均用DOM的方式存入XML,数据的读取均用Xpath读取。然后以XML文件的形式返回。以下均已用户注册为例,来说明数据的处理: 1. 用户点击注册按钮,就会把系统生成的ID和用户...

    XML基础教程与实验指导课件PPT+源代码文件。

    在本教程中,我们将深入探讨XML的基本概念、语法和应用,同时结合实验指导,帮助学习者掌握XML的实际操作技能。 一、XML简介 XML起源于1998年W3C发布的标准,它的主要目标是简化数据共享和交换,特别是在不同的系统...

    这是一本通过12个典型例子 范例介绍XML编程从入门到精通的

    4. **XML Schema**:与DTD相比,XML Schema提供了更强大的数据类型和更复杂的结构约束。它使用XSD(XML Schema Definition)文件来定义文档结构。 5. **命名空间(Namespaces)**:在XML中,命名空间可以防止元素...

    mfcxml文件

    例如,`selectNodes`方法用于查询XML节点,`getElementsByTagName`用于获取具有特定标签的所有节点,`getAttribute`和`setAttribute`用于读取和设置属性值。 对于写入XML文件,你首先需要创建或修改所需的元素和...

    Labview_Parse_XML_Data-master.rar

    LabVIEW提供了内置的XML VIs(Virtual Instruments),如“XML解析器”和“XML序列化器”,它们允许用户读取、写入和操作XML文档。 解析XML数据的过程通常包括以下几个步骤: 1. **加载XML文件**:首先,我们需要...

    《轻松搞定XML》的范例源代码和学习笔记

    DOM将整个XML文档加载到内存,形成一棵可操作的节点树;SAX是事件驱动模型,逐行读取,适合处理大型XML文件;而StAX是基于流的解析,允许开发者以迭代方式处理XML。 XML还广泛应用于Web服务(如SOAP消息)、配置...

    用XML轻松开发WEB站点

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

    Qt编程范例之中高级篇(4)之XML相关部分(附源码)

    在本篇Qt编程范例之中高级篇(4)中,我们将深入探讨XML处理技术,这是在C++开发中,特别是使用Qt框架时一个非常重要的部分。XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,因其灵活性和跨...

    XML+Web+Services高级编程范例

    C#支持XML集成,可以方便地生成、解析和操作XML文档,同时,C#也提供了丰富的类库支持Web Services的开发,例如System.Web.Services命名空间,包含了一系列用于创建和消费Web Services的类。 在这个"XML+Web+...

    libxml VC范例代码

    libxml是一个开源的XML解析库,广泛应用于处理XML文档,它提供了丰富的API来读取、写入、验证和操作XML数据。 **描述解析:** 描述中提到“libxml的范例代码工程,visual studio 2008创建”,意味着这些代码是用...

    XML编程从入门到精通

    而“VC++编程技巧与范例”虽然不是直接与XML相关的,但VC++作为强大的编程环境,可以用来编写处理XML的程序,学习如何在C++中集成和操作XML也是XML编程的一部分。 总之,通过本教程“XML编程从入门到精通”,学习者...

Global site tag (gtag.js) - Google Analytics