zoukankan      html  css  js  c++  java
  • dom4j读取xml

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,现在越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包。

    上面说dom4j这么优秀,那么好用,那么从今天开始就跟大家一起分享dom4j的一些用法。

    dom4j的主要接口都在org.dom4j这个包里定义:
     
     
    Attribute
    Attribute定义了XML的属性
    Branch
    Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,
    CDATA
    CDATA 定义了XML CDATA 区域
    CharacterData
    CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.
    Comment
    Comment 定义了XML注释的行为
    Document
    定义了XML文档
    DocumentType
    DocumentType 定义XML DOCTYPE声明
    Element
    Element定义XML 元素
    ElementHandler
    ElementHandler定义了 Element 对象的处理器
    ElementPath
    被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
    Entity
    Entity定义 XML entity
    Node
    Node为所有的dom4j中XML节点定义了多态行为
    NodeFilter
    NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
    ProcessingInstruction
    ProcessingInstruction 定义 XML 处理指令.
    Text
    Text 定义XML 文本节点.
    Visitor
    Visitor 用于实现Visitor模式.
    XPath
    XPath 在分析一个字符串后会提供一个XPath 表达式
    要想弄懂这套接口,关键的是要明白接口的继承关系:

    读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. // 从文件读取XML,输入文件名,返回XML文档  
    2. public Document read(String fileName) throws MalformedURLException, DocumentException {  
    3.        SAXReader reader = new SAXReader();  
    4.        Document document = reader.read(new File(fileName));  
    5.        return document;  
    6. }  

    reader的read方法是重载的,可以通过InputStream, File, Url等不同的参数来读取。得到的Document对象就带表了整个XML。
    根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。

    下面这个例子是SAXReader类通过InputStream读取xml文件:

    所要读取的xml文件:

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <config>  
    3.     <db-info>  
    4.         <driver-name>oracle.jdbc.driver.OracleDriver</driver-name>  
    5.         <url>jdbc:oracle:thin:@localhost:1522:mydb</url>  
    6.         <user-name>drp</user-name>  
    7.         <password>drp</password>  
    8.     </db-info>  
    9. </config>  


    读取xml文件的类:

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. package com.util;  
    2.   
    3. import java.io.InputStream;  
    4. import java.util.HashMap;  
    5. import java.util.List;  
    6. import java.util.Map;  
    7.   
    8. import org.dom4j.Document;  
    9. import org.dom4j.DocumentException;  
    10. import org.dom4j.Element;  
    11. import org.dom4j.io.SAXReader;  
    12.   
    13. /** 
    14.  * 解析sys-config.xml文件 
    15.  * @author Ronaldinho 
    16.  * 
    17.  */  
    18.   
    19. public class XmlConfigReader {  
    20.       
    21.     //懒汉式  
    22.     private static XmlConfigReader instance = null;  
    23.       
    24.     //保存jdbc相关信息  
    25.     private JdbcConfig jdbcConfig = new JdbcConfig();   
    26.       
    27.     private XmlConfigReader() {  
    28.   
    29.         //建立一个SAXReader对象    
    30.         SAXReader reader=new SAXReader();  
    31.   
    32.         //通过当前线程的类加载器,获得文件的相对路径,读入缓冲输入流   
    33.         InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");  
    34.         try {  
    35.             //通过流来读取xml文件  
    36.             Document doc=reader.read(in);  
    37.               
    38.             //读取jdbc相关信息  
    39.             Element driverNameElt=(Element) doc.selectObject("/config/db-info/driver-name");  
    40.             Element urlElt=(Element) doc.selectObject("/config/db-info/url");  
    41.             Element userNameElt=(Element) doc.selectObject("/config/db-info/user-name");  
    42.             Element passwordElt=(Element) doc.selectObject("/config/db-info/password");  
    43.               
    44.             //设置jdbc相关信息  
    45.             jdbcConfig.setDrivername(driverNameElt.getStringValue());  
    46.             jdbcConfig.setUrl(urlElt.getStringValue());  
    47.             jdbcConfig.setUsername(userNameElt.getStringValue());  
    48.             jdbcConfig.setPassword(passwordElt.getStringValue());  
    49.   
    50.         } catch (DocumentException e) {  
    51.             e.printStackTrace();  
    52.         }  
    53.     }  
    54.       
    55.     public static synchronized XmlConfigReader getInstance() {  
    56.         if (instance==null) {  
    57.             instance = new XmlConfigReader();  
    58.         }  
    59.         return instance;  
    60.     }  
    61. }  

    上面这种方式是通过单例模式生成一个对象,这个对象实例化一个SAXReader,然后将xml文件加载到流当中。再通过SAXReader的read()方法将其转换成一个document对象。然后通过这个document对象取到xml文件的节点的值。

    今天就先简单介绍一下利用dom4j读取xml文件,后面会陆续跟大家说说其他的用法。大家不要着急哦。

    PS:欢迎各位批评指正!

  • 相关阅读:
    中国电信翼聊学习(概述)
    Silverlight应用程序的本地通讯
    XmlSerialize构造函数发生错误FileNotFoundException
    使用 .NET Framework 中的函数式编程技术
    月份统计精简Sql
    poj 2421 Constructing Roads
    POJ 3026 Borg Maze
    POJ 1258 AgriNet
    zoj 1718 Building a Space Station
    zoj 1203 Swordfish
  • 原文地址:https://www.cnblogs.com/afjbk/p/5955017.html
Copyright © 2011-2022 走看看