使用dom4j解析xml文件


 DOM4J

    與利用DOM、SAX、JAXP機制來解析xml相比,DOM4J 表現更優秀,具有性能優異、功能強大和極端易用使用的特點,只要懂得DOM基本概念,就可以通過dom4j的api文檔來解析xml。dom4j是一套開源的api。實際項目中,往往選擇dom4j來作為解析xml的利器。

先來看看dom4j中對應XML的DOM樹建立的繼承關系

  

針對於XML標准定義,對應於圖中列出的內容,dom4j提供了以下實現:

  

同時,dom4j的NodeType枚舉實現了XML規范中定義的node類型。如此可以在遍歷xml文檔的時候通過常量來判斷節點類型了。

常用API

class org.dom4j.io.SAXReader

  • read  提供多種讀取xml文件的方式,返回一個Domcument對象

interface org.dom4j.Document

  • iterator  使用此法獲取node
  • getRootElement  獲取根節點

interface org.dom4j.Node

  • getName  獲取node名字,例如獲取根節點名稱為bookstore
  • getNodeType  獲取node類型常量值,例如獲取到bookstore類型為1——Element
  • getNodeTypeName  獲取node類型名稱,例如獲取到的bookstore類型名稱為Element

interface org.dom4j.Element

  • attributes  返回該元素的屬性列表
  • attributeValue  根據傳入的屬性名獲取屬性值
  • elementIterator  返回包含子元素的迭代器
  • elements  返回包含子元素的列表

interface org.dom4j.Attribute

  • getName  獲取屬性名
  • getValue  獲取屬性值

interface org.dom4j.Text

  • getText  獲取Text節點值

interface org.dom4j.CDATA

  • getText  獲取CDATA Section值

interface org.dom4j.Comment

  • getText  獲取注釋

解析實例:

1.先准備好一個xml文件,本文解析的是一個spring的配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 3     "http://www.springframework.org/dtd/spring-beans.dtd">
 4 
 5     <beans>
 6         <bean id="productManager" class="com.yangyang.manager.product.impl.ProductManagerImpl">
 7             <property name="productDao" ref="productDao"></property>
 8             <property name="soDao" ref="soDao"></property>
 9         </bean>
10         <bean id="contractManager" class="com.yangyang.manager.product.impl.ContractManagerImpl"  autowire="byName"/>    
11     </beans>
12     
View Code

2.第二步,添加dom4j的jar包到工程中,本文使用的jar版本是dom4j-1.6.1.jar

3.第三補,編寫解析xml文件的工具類

 1 package com.yangyang;
 2 
 3 import java.net.URL;
 4 import java.util.Iterator;
 5 
 6 import org.dom4j.Attribute;
 7 import org.dom4j.Document;
 8 import org.dom4j.Element;
 9 import org.dom4j.io.SAXReader;
10 
11 public class XmlParseUtil {
12     
13     @SuppressWarnings("rawtypes")
14     public static void parseXml(String xmlPath){
15         SAXReader saxReader=new SAXReader();
16         Document document=null;
17         try {
18             document=saxReader.read(xmlPath);
19             //獲取根節點
20             Element elementRoot=document.getRootElement();
21             System.out.println("根節點名稱:"+elementRoot.getName());
22             //遍歷根節點下面的節點
23             for(Iterator elementIterator=elementRoot.elementIterator();elementIterator.hasNext();){
24                 Element element=(Element)elementIterator.next();
25                 //獲取節點的信息,,包括節點的名稱以及節點的屬性信息
26                 System.out.println("節點:"+element.getName());
27                 for (Iterator attrIterator = element.attributeIterator(); attrIterator.hasNext();) {
28                     Attribute attr=(Attribute)attrIterator.next();
29                     //節點的屬性信息
30                     System.out.println("節點的屬性名稱為:"+attr.getName()+",值為:"+attr.getValue());
31                     
32                 }
33                 //獲取節點下的子節點
34                 for (Iterator subElementiterator = element.elementIterator(); subElementiterator.hasNext();) {
35                     Element subElement=(Element)subElementiterator.next();
36                     //獲取子節點的信息,包括子節點的名稱以及子節點的屬性信息
37                     System.out.println("子節點:"+subElement.getName());
38                     for (Iterator subElementAttrIterator = subElement.attributeIterator(); subElementAttrIterator.hasNext();) {
39                         Attribute subElementAttr=(Attribute)subElementAttrIterator.next();
40                         //子節點的屬性信息
41                         System.out.println("子節點的屬性名稱為:"+subElementAttr.getName()+",值為:"+subElementAttr.getValue());
42                         
43                     }
44                     
45                 }
46             }
47         } catch (Exception e) {
48         }
49     }
50 }
View Code

4.編寫測試方法來測試該工具類:

 1 package com.yangyang;
 2 import java.io.File;
 3 public class TestXmlParse {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         String xmlPath="src/com/yangyang/spring-service-product.xml";
10         xmlPath=new File(xmlPath).getAbsolutePath();
11         XmlParseUtil.parseXml(xmlPath);
12     }
13 
14 }
View Code

可以看到控制台打印出:

根節點名稱:beans
節點:bean
節點的屬性名稱為:id,值為:productManager
節點的屬性名稱為:class,值為:com.yangyang.manager.product.impl.ProductManagerImpl
節點的屬性名稱為:lazy-init,值為:default
節點的屬性名稱為:autowire,值為:default
節點的屬性名稱為:dependency-check,值為:default
子節點:property
子節點的屬性名稱為:name,值為:productDao
子節點的屬性名稱為:ref,值為:productDao
子節點:property
子節點的屬性名稱為:name,值為:soDao
子節點的屬性名稱為:ref,值為:soDao
節點:bean
節點的屬性名稱為:id,值為:contractManager
節點的屬性名稱為:class,值為:com.yangyang.manager.product.impl.ContractManagerImpl
節點的屬性名稱為:autowire,值為:byName
節點的屬性名稱為:lazy-init,值為:default
節點的屬性名稱為:dependency-check,值為:default

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM