使用Dom4j解析XML文件

      与利用DOM、SAX、JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。dom4j是一套开源的api。实际项目中,往往选择dom4j来作为解析xml的利器。

所用jar包:dom4j-1.6.1.jar

 

常用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  获取注释 

需要解析的xml文件:people.xml

1 <people city="BeiJing">
2     <student name="Jack" age="10">My name is Jack!</student>
3     <student name="Lucy" age="11">My name is Lucy!</student>
4     <student name="James" age="12"/>
5     <teacher name="Jason" age="25">I am a teacher!</teacher>
6     <teacher name="Michael" age="30">I am a teacher too!</teacher>
7 </people>
people.xml

首先根据xml文档构建javabean:

 1 package bean;
 2 
 3 import java.util.List;
 4 
 5 public class People {
 6     private String city;
 7     private List<Student> student;
 8     private List<Teacher> teacher;
 9     
10     public String getCity() {
11         return city;
12     }
13     public void setCity(String city) {
14         this.city = city;
15     }
16     public List<Student> getStudent() {
17         return student;
18     }
19     public void setStudent(List<Student> student) {
20         this.student = student;
21     }
22     public List<Teacher> getTeacher() {
23         return teacher;
24     }
25     public void setTeacher(List<Teacher> teacher) {
26         this.teacher = teacher;
27     }
28 }
People.java
 1 package bean;
 2 
 3 public class Student {
 4     private String name;
 5     private int age;
 6     private String text;
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public int getAge() {
14         return age;
15     }
16     public void setAge(int age) {
17         this.age = age;
18     }
19     public String getResult() {
20         return text;
21     }
22     public void setResult(String result) {
23         this.text = result;
24     }
25     public Student(String name, int age, String text) {
26         super();
27         this.name = name;
28         this.age = age;
29         this.text = text;
30     }
31 }
Student.java
 1 package bean;
 2 
 3 public class Teacher {
 4     private String name;
 5     private int age;
 6     private String text;
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public int getAge() {
14         return age;
15     }
16     public void setAge(int age) {
17         this.age = age;
18     }
19     public String getResult() {
20         return text;
21     }
22     public void setResult(String result) {
23         this.text = result;
24     }
25     public Teacher(String name, int age, String text) {
26         super();
27         this.name = name;
28         this.age = age;
29         this.text = text;
30     }
31 }
Teacher.java
解析代码如下:
 1 package xml;
 2 
 3 import java.io.File;
 4 import java.net.URISyntaxException;
 5 import java.util.ArrayList;
 6 import java.util.Iterator;
 7 import java.util.List;
 8 
 9 import org.dom4j.Document;
10 import org.dom4j.DocumentException;
11 import org.dom4j.Element;
12 import org.dom4j.io.SAXReader;
13 
14 import bean.People;
15 import bean.Student;
16 import bean.Teacher;
17 
18 public class Dom4jParserXML {
19     public static People parseXml(String xmlPath) {
20         File xmlFile = new File(xmlPath);
21         System.out.println(xmlFile.getPath());
22         
23         if (xmlFile.exists()) {
24             SAXReader reader = new SAXReader();
25             People people = new People();
26             try {
27                 // 读入文档流
28                 Document document = reader.read(xmlFile);
29                 // 获取根节点
30                 Element root = document.getRootElement();
31 
32                 List<Student> students = new ArrayList<Student>();
33                 List<Teacher> teachers = new ArrayList<Teacher>();
34                 
35                 people.setCity(root.attributeValue("city"));
36                 // 解析student节点
37                 for (Iterator<Element> iterator = root
38                         .elementIterator("student"); iterator.hasNext();) {
39                     Element eStudent = iterator.next();
40                     String text = eStudent.getText();
41                     
42                     Student student = new Student(
43                             eStudent.attributeValue("name"),
44                             Integer.parseInt(eStudent.attributeValue("age")),text);
45                     students.add(student);
46                 }
47                 // 解析teacher节点
48                 for (Iterator<Element> iterator = root
49                         .elementIterator("teacher"); iterator.hasNext();) {
50                     Element eTeacher = iterator.next();
51                     String text = eTeacher.getText();
52                     
53                     Teacher teacher = new Teacher(
54                             eTeacher.attributeValue("name"),
55                             Integer.parseInt(eTeacher.attributeValue("age")),text);
56                     teachers.add(teacher);
57                 }
58                 people.setStudent(students);
59                 people.setTeacher(teachers);
60                 
61                 System.out.println("Parse success!");
62             } catch (DocumentException e) {
63                 e.printStackTrace();
64             }
65             return people;
66         } else {
67             System.err.println("File is not exist!");
68             return null;
69         }
70     }
71 
72     public static void main(String[] args) throws URISyntaxException {
73         String xmlPath = "E://xml//people.xml";
74         System.out.println("File full path is " + xmlPath);
75         // 解析people.xml
76         People p = parseXml(xmlPath);
77 
78         // 处理解析结果
79         System.out.println("The city is : " + p.getCity());
80         List<Student> sList = p.getStudent();
81         List<Teacher> tList = p.getTeacher();
82         for (Student s : sList) {
83             System.out.println(s.getName() + "->" + s.getAge() + "->" + s.getResult());
84         }
85         for (Teacher t : tList) {
86             System.out.println(t.getName() + "->" + t.getAge() + "->" + t.getResult());
87         }
88     }
89 }

运行结果:

File full path is E://xml//people.xml
E:\xml\people.xml
Parse success!
The city is : BeiJing
Jack->10->My name is Jack!
Lucy->11->My name is Lucy!
James->12->
Jason->25->I am a teacher!
Michael->30->I am a teacher too!
Result
原文地址:https://www.cnblogs.com/luomsg/p/4043136.html