dom4j,dom4j解析xml

來源:互聯網
上載者:User

dom4j,dom4j解析xml

Dom4j是什麼DD?

    dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,對主流的Java XML API進行的效能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。如今你可以看到越來越多的Java軟體都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包,Hibernate用它來讀寫設定檔dom4j需要匯入dom4j-full.jar包.

Dom4j家庭成員

   主要API都在org.dom4j這個包裡定義:

      1.Attribute Attribute定義了XML的屬性

       2.Branch Branch為能夠包含子節點的節點如XML元素(Element)和文檔(Docuemnts)定義了一個公用的行為, 
       3.CDATA CDATA 定義了XML CDATA 地區 
       4.CharacterData CharacterData是一個標識借口,標識基於字元的節點。如CDATA,Comment, Text. 
       5. Comment Comment 定義了XML注釋的行為  

       6. Document 定義了XML文檔

       7.DocumentType DocumentType 定義XML DOCTYPE聲明

       8. Element Element定義XML 元素

       9.   ElementHandler ElementHandler定義了 Element 對象的處理器 
      10.  ElementPath 被 ElementHandler 使用,用於取得當前正在處理的路徑層次資訊

      11.  Entity Entity定義 XML entity 
      12.  Node Node為所有的dom4j中XML節點定義了多態行為

      13.  NodeFilter NodeFilter 定義了在dom4j節點中產生的一個濾鏡或謂詞的行為(predicate)

      14.  ProcessingInstruction ProcessingInstruction 定義 XML 處理指示.

      15.  Text Text 定義XML 常值節點.

      16.  Visitor Visitor 用於實現Visitor模式.

      17.  XPath XPath 在分析一個字串後會提供一個XPath 運算式

 Dom4j如何幹活?

 

 1.利用dom4j建立一個XML檔案:

     

     

 1 package com.xml;    2    3 import java.io.FileWriter;    4 import java.io.IOException;    5    6 import org.dom4j.Document;    7 import org.dom4j.DocumentHelper;    8 import org.dom4j.Element;    9 import org.dom4j.io.OutputFormat;   10 import org.dom4j.io.XMLWriter;   11   12 public class CreateXML {   13   14 public static void main(String[] args) {   15         XMLWriter writer = null;   16         try {   17             // 1.document構建器   18             Document doc = DocumentHelper.createDocument();   19             // 2.添加元素(根)   20             Element students = doc.addElement("students");   21             Element student1 = students.addElement("student");   22             // 添加屬性;   23             student1.addAttribute("stuno", "s001");   24             // 添加子項目   25             student1.addElement("stuname").setText("劉光藍");   26             student1.addElement("stusex").setText("男");   27             student1.addElement("stuage").setText("25");   28             //設定輸出格式   29             OutputFormat format=OutputFormat.createPrettyPrint();   30             format.setEncoding("UTF-8");   31             writer = new XMLWriter(new FileWrite("d:/student.xml"),format);   32             writer.write(doc);   33             System.out.println("產生XML成功!");   34         } catch (Exception e) {   35             e.printStackTrace();   36         } finally {   37             try {   38                 writer.close();   39             } catch (IOException e) {   40                 // TODO Auto-generated catch block   41                 e.printStackTrace();   42             }   43         }   44   45     }   46   47 }  

  

 

 1 package com.xml; 2  3 import java.io.FileWriter; 4 import java.io.IOException; 5  6 import org.dom4j.Document; 7 import org.dom4j.DocumentHelper; 8 import org.dom4j.Element; 9 import org.dom4j.io.OutputFormat;10 import org.dom4j.io.XMLWriter;11 12 public class CreateXML {13 14 public static void main(String[] args) {15   XMLWriter writer = null;16   try {17    // 1.document構建器18    Document doc = DocumentHelper.createDocument();19    // 2.添加元素(根)20    Element students = doc.addElement("students");21    Element student1 = students.addElement("student");22    // 添加屬性;23    student1.addAttribute("stuno", "s001");24    // 添加子項目25    student1.addElement("stuname").setText("劉光藍");26    student1.addElement("stusex").setText("男");27    student1.addElement("stuage").setText("25");28    //設定輸出格式29    OutputFormat format=OutputFormat.createPrettyPrint();30    format.setEncoding("UTF-8");31    writer = new XMLWriter(new FileWrite("d:/student.xml"),format);32    writer.write(doc);33    System.out.println("產生XML成功!");34   } catch (Exception e) {35    e.printStackTrace();36   } finally {37    try {38     writer.close();39    } catch (IOException e) {40     // TODO Auto-generated catch block41     e.printStackTrace();42    }43   }44 45  }46 47 }

 

     

  2.利用dom4j讀取一個XML檔案:

 

 1 package com.xml;    2    3 import java.io.File;    4 import java.util.List;    5    6 import org.dom4j.Document;    7 import org.dom4j.Element;    8 import org.dom4j.Node;    9 import org.dom4j.io.SAXReader;   10   11 public class ReaderXML {   12     public static void main(String[] args) {   13           try {   14         SAXReader saxReader=new SAXReader();   15         Document doc=saxReader.read(new File("d:/student.xml"));   16         //利用XPath來訪問元素,屬性   17         //  /students/student[1] 指定某個元素   18         //  /students/student/@stuno 指定某個屬性   19         //  /students/student[@stuno='s002']做判斷   20         List<Node> data=doc.selectNodes("/students/student");   21         for(Node node:data){   22               //node.asXML() 以字串的格式列印XML   23               if("Element".equals(node.getNodeTypeName())){   24                 Element element=(Element)node;   25                 //讀取屬性值   26                 System.out.println(element.attributeValue("stuno"));   27                 //讀取子項目文本值   28                 System.out.println(element.elementText("stuname"));   29                 System.out.println(element.elementText("stusex"));   30                 System.out.println(element.elementText("stuage")+"\n");   31                 }   32             }   33         } catch (Exception e) {   34             e.printStackTrace();   35         }              36     }   37   38 }  

 

 

 1 package com.xml; 2  3 import java.io.File; 4 import java.util.List; 5  6 import org.dom4j.Document; 7 import org.dom4j.Element; 8 import org.dom4j.Node; 9 import org.dom4j.io.SAXReader;10 11 public class ReaderXML {12  public static void main(String[] args) {13        try {14   SAXReader saxReader=new SAXReader();15   Document doc=saxReader.read(new File("d:/student.xml"));16   //利用XPath來訪問元素,屬性17   //  /students/student[1] 指定某個元素18   //  /students/student/@stuno 指定某個屬性19   //  /students/student[@stuno='s002']做判斷20   List<Node> data=doc.selectNodes("/students/student");21   for(Node node:data){22         //node.asXML() 以字串的格式列印XML23         if("Element".equals(node.getNodeTypeName())){24     Element element=(Element)node;25     //讀取屬性值26     System.out.println(element.attributeValue("stuno"));27     //讀取子項目文本值28     System.out.println(element.elementText("stuname"));29     System.out.println(element.elementText("stusex"));30     System.out.println(element.elementText("stuage")+"\n");31     }32    }33   } catch (Exception e) {34    e.printStackTrace();35   }   36  }37 38 }

 


 

3.利用dom4j修改一個XML檔案:

 

 1 package com.xml;    2    3 import java.io.File;    4 import java.io.FileWriter;    5 import java.io.IOException;    6 import java.util.List;    7    8 import org.dom4j.Document;    9 import org.dom4j.Element;   10 import org.dom4j.Node;   11 import org.dom4j.io.OutputFormat;   12 import org.dom4j.io.SAXReader;   13 import org.dom4j.io.XMLWriter;   14   15 public class UpdateXMLData {   16        17      public static void main(String[] args) {   18         XMLWriter writer = null;   19         try {   20             SAXReader saxReader = new SAXReader();   21             Document doc = saxReader .read(new File("d:/student.xml"));   22             List<Node> data = doc   23                     .selectNodes("/students/student[@stuno='s002']");   24             for (Node node : data) {   25                 if ("Element".equals(node.getNodeTypeName())) {   26                     Element temp = (Element) node;   27                                         //修改student的stuno屬性值   28                     temp.setAttributeValue("stuno", "stu002");   29                 }   30             }   31             OutputFormat format = OutputFormat.createPrettyPrint();   32             format.setEncoding("UTF-8");   33             writer = new XMLWriter(new FileWriter("d:/student.xml"), format);   34             writer.write(doc);   35             System.out.println("修改成功!");   36         } catch (Exception e) {   37             e.printStackTrace();   38         } finally {   39             try {   40                 writer.close();   41             } catch (IOException e) {   42                 // TODO Auto-generated catch block   43                 e.printStackTrace();   44             }   45         }   46   47     }   48   49 } 

 


本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/yueye729107/archive/2010/01/29/5269887.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.