dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,現在越來越多的Java軟體都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包。
上面說dom4j這麼優秀,那麼好用,那麼從今天開始就跟大家一起分享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 表示式
|
- interface org.dom4j.CharacterData
- interface org.dom4j.DocumentType
- interface org.dom4j.Entity
- interface org.dom4j.ProcessingInstruction
讀寫XML文件主要依賴於org.dom4j.io包,其中提供DOMReader和SAXReader兩類不同方式,而呼叫方式是一樣的。這就是依靠介面的好處。
// 從檔案讀取XML,輸入檔名,返回XML文件 public Document read(String fileName) throws MalformedURLException, DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); return document; }
reader的read方法是過載的,可以通過InputStream, File, Url等不同的引數來讀取。得到的Document物件就帶表了整個XML。
根據本人自己的經驗,讀取的字元編碼是按照XML檔案頭定義的編碼來轉換。如果遇到亂碼問題,注意要把各處的編碼名稱保持一致即可。
下面這個例子是SAXReader類通過InputStream讀取xml檔案:
所要讀取的xml檔案:
<?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@localhost:1522:mydb</url> <user-name>drp</user-name> <password>drp</password> </db-info> </config>
讀取xml檔案的類:
package com.util; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 解析sys-config.xml檔案 * @author Ronaldinho * */ public class XmlConfigReader { //懶漢式 private static XmlConfigReader instance = null; //儲存jdbc相關資訊 private JdbcConfig jdbcConfig = new JdbcConfig(); private XmlConfigReader() { //建立一個SAXReader物件 SAXReader reader=new SAXReader(); //通過當前執行緒的類載入器,獲得檔案的相對路徑,讀入緩衝輸入流 InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try { //通過流來讀取xml檔案 Document doc=reader.read(in); //讀取jdbc相關資訊 Element driverNameElt=(Element) doc.selectObject("/config/db-info/driver-name"); Element urlElt=(Element) doc.selectObject("/config/db-info/url"); Element userNameElt=(Element) doc.selectObject("/config/db-info/user-name"); Element passwordElt=(Element) doc.selectObject("/config/db-info/password"); //設定jdbc相關資訊 jdbcConfig.setDrivername(driverNameElt.getStringValue()); jdbcConfig.setUrl(urlElt.getStringValue()); jdbcConfig.setUsername(userNameElt.getStringValue()); jdbcConfig.setPassword(passwordElt.getStringValue()); } catch (DocumentException e) { e.printStackTrace(); } } public static synchronized XmlConfigReader getInstance() { if (instance==null) { instance = new XmlConfigReader(); } return instance; } }
上面這種方式是通過單例模式生成一個物件,這個物件例項化一個SAXReader,然後將xml檔案載入到流當中。再通過SAXReader的read()方法將其轉換成一個document物件。然後通過這個document物件取到xml檔案的節點的值。
今天就先簡單介紹一下利用dom4j讀取xml檔案,後面會陸續跟大家說說其他的用法。大家不要著急哦。
PS:歡迎各位批評指正!