与利用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
interface org.dom4j.Document
interface org.dom4j.Node
interface org.dom4j.Element
interface org.dom4j.Attribute
interface org.dom4j.Text
interface org.dom4j.CDATA
interface org.dom4j.Comment
需要解析的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 = root38 .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 = root49 .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.xml76 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.xmlE:/xml/people.xmlParse success!The city is : BeiJingJack->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
新闻热点
疑难解答