【java項目實戰】dom4j解析xml文件,連接Oracle數據庫

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


[java] view plain copy
 print?
  1. package util;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6.   
  7.   
  8. public class DbUtil {  
  9.     /** 
  10.      * 取得Connection 
  11.      * @return  
  12.      */  
  13.     public static Connection getConnection(){  
  14.         Connection conn=null;  
  15.         try {  
  16.             JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();  
  17.             //獲取oracle驅動的路徑  
  18.             Class.forName(jdbcConfig.getDriverName());  
  19.             // String url = "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL";  
  20.             // 數據庫連接,oracle代表連接的是oracle數據庫;thin:@MyDbComputerNameOrIP代表的是數據庫所在的IP地址(可以保留thin:);  
  21.             //1521代表連接數據庫的端口號;ORCL代表的是數據庫名稱  
  22.             conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());  
  23.                           
  24.         } catch (ClassNotFoundException e) {  
  25.             e.printStackTrace();  
  26.         } catch (SQLException e) {  
  27.             e.printStackTrace();  
  28.         }  
  29.         return conn;  
  30.           
  31.     }  
  32.       
  33. }  

數據庫配置文件:sys-config.xml

[html] view plain copy
 print?
  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:1521:oracle</url>  
  6.         <user-name>drp1</user-name>  
  7.         <password>drp1</password>  
  8.     </db-info>  
  9. </config>  

jdbc的配置信息:JdbcConfig.java


[java] view plain copy
 print?
  1. package util;  
  2. /** 
  3.  * jdbc配置信息 
  4.  * @author liang 
  5.  * 
  6.  */  
  7. public class JdbcConfig {  
  8.   
  9.       
  10.   
  11.     private String driverName;  
  12.       
  13.     private String url;  
  14.       
  15.     private String userName;  
  16.       
  17.     private String password;  
  18.       
  19.     public String getDriverName() {  
  20.         return driverName;  
  21.     }  
  22.   
  23.     public void setDriverName(String driverName) {  
  24.         this.driverName = driverName;  
  25.     }  
  26.   
  27.     public String getUrl() {  
  28.         return url;  
  29.     }  
  30.   
  31.     public void setUrl(String url) {  
  32.         this.url = url;  
  33.     }  
  34.   
  35.     public String getUserName() {  
  36.         return userName;  
  37.     }  
  38.   
  39.     public void setUserName(String userName) {  
  40.         this.userName = userName;  
  41.     }  
  42.   
  43.     public String getPassword() {  
  44.         return password;  
  45.     }  
  46.   
  47.     public void setPassword(String password) {  
  48.         this.password = password;  
  49.     }  
  50.   
  51.       
  52. }  

dom4j讀取xml:XmlConfigReader.java


[java] view plain copy
 print?
  1. package util;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import org.dom4j.Document;  
  6. import org.dom4j.DocumentException;  
  7. import org.dom4j.Element;  
  8. import org.dom4j.io.SAXReader;  
  9. /** 
  10.  * 採用單例解析sys-config.xml文件 
  11.  * @author liang 
  12.  * 
  13.  */  
  14. public class XmlConfigReader {  
  15.   
  16.     //單例懶漢式(延遲加載lazy)  
  17.     //設置爲空,使用在new,不用不new  
  18.     private static XmlConfigReader instance = null;  
  19.       
  20.     //定義JdbcConfig成員變量,保存jdbc相關配置信息  
  21.     private JdbcConfig jdbcConfig = new JdbcConfig();;  
  22.       
  23.     private XmlConfigReader(){  
  24.         //創建saxReader對象  
  25.         SAXReader reader = new SAXReader();  
  26.         //通過當前線程的類加載器,獲得文件的相對路徑,將xml文件讀入到輸入流  
  27.         InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");  
  28.         try {  
  29.              // 通過read方法讀取xml文件, 轉換成Document對象    
  30.             Document doc = reader.read(in);  
  31.               
  32.             //獲得節點對象,取得jdbc相關的配置信息  
  33.             Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");     
  34.             Element urlElt = (Element)doc.selectObject("/config/db-info/url");  
  35.             Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");  
  36.             Element passwordElt = (Element)doc.selectObject("/config/db-info/password");  
  37.               
  38.             //設置jdbc相關的配置  
  39.             jdbcConfig.setDriverName(driverNameElt.getStringValue());  
  40.             jdbcConfig.setUrl(urlElt.getStringValue());  
  41.             jdbcConfig.setUserName(userNameElt.getStringValue());  
  42.             jdbcConfig.setPassword(passwordElt.getStringValue());  
  43.         } catch (DocumentException e) {  
  44.             e.printStackTrace();  
  45.         }  
  46.     }  
  47.   
  48.     /** 
  49.      * 加鎖,實現多線程的同步機制,防止多線程的訪問衝突 
  50.      * @return 
  51.      */  
  52.     public static synchronized XmlConfigReader getInstance(){  
  53.         if(instance == null){             
  54.             instance = new XmlConfigReader();  
  55.         }  
  56.         return instance;  
  57.     }  
  58.     /** 
  59.      * 返回jdbc的相關配置 
  60.      * @return 
  61.      */  
  62.     public JdbcConfig getJdbcConfig(){  
  63.         return jdbcConfig;  
  64.     }  
  65. }  


解析:讀寫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數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章