dom4j

Posted lenbore

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dom4j相关的知识,希望对你有一定的参考价值。

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

以上是关于dom4j的主要内容,如果未能解决你的问题,请参考以下文章

Dom4j

dom4j 不兼容的类型: java.util.List (org.dom4j.Node)无法转换为java.util.List(org.dom4j.Element)

dom4j

XML——XML解析之DOM4J

dom4j读取xml

dom4j解析xmljavaweb三层架构初探