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