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 block 41 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() 以字符串的格式打印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 }
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