dom4j是由dom4j.org出品的一個開源XML解析包。這句話太官方,我們還是看一下官方給出的解釋。如下圖:
dom4j是一個易於使用的、開源的,用於解析XML,XPath和XSLT等語言的庫。它應用於Java平臺,採用了Java集合框架並完全支持DOM,SAX和JAXP等編程標準。
特點
dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,例如Hibernate,包括sun公司自己的JAXM也用了dom4j。
下載
既然dom4j具有上面N多的優點,所以我們必須揭開dom4j的神祕面紗。使用dom4j開發,需下載dom4j相應的jar文件。
1.官網下載::http://www.dom4j.org/dom4j-1.6.1/
2.dom4j是sourceforge.net上的一個開源項目,因此可以到http://sourceforge.net/projects/dom4j下載其最新版
打開dom4j-1.6.1的解壓文件,我們可以看到有docs幫助的文件夾,也有dom4j解析xml文件的dom4j-1.6.1.jar文件。我們只需要把dom4j-1.6.1.jar文件構建到我們開發的項目中就可以使用dom4j開發了。
實例
下面我們使用dom4j讀取系統配置文件,實現連接Oracle數據庫的功能。在開始之前,將我們需要的jar構建到我們的項目中,例如:
1、將Oracle jdbc驅動拷貝到WEB-INF/lib下
2、將dom4j相關的jar拷貝到WEB-INF/lib下
(1)dom4j-1.6.1.jar
(2)jaxen-1.1-beta-6.jar(支持xpath相關的jar包)
連接數據庫類:DbUitl.java
- package util;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- public class DbUtil {
- /**
- * 取得Connection
- * @return
- */
- public static Connection getConnection(){
- Connection conn=null;
- try {
- JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
- //獲取oracle驅動的路徑
- Class.forName(jdbcConfig.getDriverName());
- // String url = "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL";
- // 數據庫連接,oracle代表連接的是oracle數據庫;thin:@MyDbComputerNameOrIP代表的是數據庫所在的IP地址(可以保留thin:);
- //1521代表連接數據庫的端口號;ORCL代表的是數據庫名稱
- conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- }
數據庫配置文件:sys-config.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <config>
- <db-info>
- <driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
- <url>jdbc:oracle:thin:@localhost:1521:oracle</url>
- <user-name>drp1</user-name>
- <password>drp1</password>
- </db-info>
- </config>
jdbc的配置信息:JdbcConfig.java
- package util;
- /**
- * jdbc配置信息
- * @author liang
- *
- */
- public class JdbcConfig {
- private String driverName;
- private String url;
- private String userName;
- private String password;
- public String getDriverName() {
- return driverName;
- }
- public void setDriverName(String driverName) {
- this.driverName = driverName;
- }
- public String getUrl() {
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
dom4j讀取xml:XmlConfigReader.java
- package util;
- import java.io.InputStream;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- /**
- * 採用單例解析sys-config.xml文件
- * @author liang
- *
- */
- public class XmlConfigReader {
- //單例懶漢式(延遲加載lazy)
- //設置爲空,使用在new,不用不new
- private static XmlConfigReader instance = null;
- //定義JdbcConfig成員變量,保存jdbc相關配置信息
- private JdbcConfig jdbcConfig = new JdbcConfig();;
- private XmlConfigReader(){
- //創建saxReader對象
- SAXReader reader = new SAXReader();
- //通過當前線程的類加載器,獲得文件的相對路徑,將xml文件讀入到輸入流
- InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
- try {
- // 通過read方法讀取xml文件, 轉換成Document對象
- 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();
- }
- }
- /**
- * 加鎖,實現多線程的同步機制,防止多線程的訪問衝突
- * @return
- */
- public static synchronized XmlConfigReader getInstance(){
- if(instance == null){
- instance = new XmlConfigReader();
- }
- return instance;
- }
- /**
- * 返回jdbc的相關配置
- * @return
- */
- public JdbcConfig getJdbcConfig(){
- return jdbcConfig;
- }
- }
解析:讀寫XML文檔主要依賴於org.dom4j.io包,其中提供DOMReader和SAXReader兩類不同方式,而調用方式是一樣的。這就是依靠接口的好處。
其中,reader的read方法是重載的,可以從InputStream, File, Url等多種不同的源來讀取,得到的Document對象就代表了整個XML。
dom4j解析xml的四步
1、以單例模式創建SAXReader對象
2、將xml文件讀入到輸入流中
3、read方法讀取xml文件,轉換成document對象
4、通過document對象取到xml文件的節點值
總結
俗話說的好:站在巨人的肩膀上。dom4j就是巨人,能夠清楚的認識dom4j,並會使用就ok了。
支持源碼下載:dom4j解析xml,連接oracle數據庫