- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- dom4j如何讀取XML文件
小編給大家分享一下dom4j如何讀取XML文件,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
dom4j是一個(gè)Java的XML API,類(lèi)似于jdom,用來(lái)讀寫(xiě)XML文件的。dom4j是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件,現在越來(lái)越多的Java軟件都在使用dom4j來(lái)讀寫(xiě)XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包。
上面說(shuō)dom4j這么優(yōu)秀,那么好用,那么從今天開(kāi)始就跟大家一起分享dom4j的一些用法。
dom4j的主要接口都在org.dom4j這個(gè)包里定義:
要想弄懂這套接口,關(guān)鍵的是要明白接口的繼承關(guān)系:
讀寫(xiě)XML文檔主要依賴(lài)于org.dom4j.io包,其中提供DOMReader和SAXReader兩類(lèi)不同方式,而調用方式是一樣的。這就是依靠接口的好處。
// 從文件讀取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方法是重載的,可以通過(guò)InputStream, File, Url等不同的參數來(lái)讀取。得到的Document對象就帶表了整個(gè)XML。
根據本人自己的經(jīng)驗,讀取的字符編碼是按照XML文件頭定義的編碼來(lái)轉換。如果遇到亂碼問(wèn)題,注意要把各處的編碼名稱(chēng)保持一致即可。
下面這個(gè)例子是SAXReader類(lèi)通過(guò)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文件的類(lèi):
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相關(guān)信息 private JdbcConfig jdbcConfig = new JdbcConfig(); private XmlConfigReader() { //建立一個(gè)SAXReader對象 SAXReader reader=new SAXReader(); //通過(guò)當前線(xiàn)程的類(lèi)加載器,獲得文件的相對路徑,讀入緩沖輸入流 InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try { //通過(guò)流來(lái)讀取xml文件 Document doc=reader.read(in); //讀取jdbc相關(guān)信息 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相關(guān)信息 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; } }
上面這種方式是通過(guò)單例模式生成一個(gè)對象,這個(gè)對象實(shí)例化一個(gè)SAXReader,然后將xml文件加載到流當中。再通過(guò)SAXReader的read()方法將其轉換成一個(gè)document對象。然后通過(guò)這個(gè)document對象取到xml文件的節點(diǎn)的值。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站