使用Dom4j解析XML文件

王朝学院·作者佚名  2016-05-29
窄屏简体版  字體: 小  |  中  |  大  |  超大  

使用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 使用此法获取nodegetRootElement 获取根节点interface org.dom4j.Node

getName 获取node名字,例如获取根节点名称为bookstoregetNodeType 获取node类型常量值,例如获取到bookstore类型为1——ElementgetNodeTypeName 获取node类型名称,例如获取到的bookstore类型名称为Elementinterface 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 = 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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航