使用java的Dom4J解析XML

发表时间:2017-05-10 14:05:40 浏览量( 25 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

这节课我们使用java解析XML文件,并封装到java对象中。这也是以后的重点内容。

一、封装对象

我们还是使用昨天的例子:

“课室里面有两个学生和一个老师,学生有姓名,年龄,地址等属性,地址分为省和市来表示,老师有姓名和任课项目,每一个学生和老师都有一个Id一个学生只能有一个姓名, 年龄。地址可以有多个。”

对于这个例子,昨天我们已经使用XML进行结构化保存了,现在我们再次使用javaBean对象对其进行封装。新建一个com.pojo包,在这个包中建立javaBean对象。

1、新建一个老师类Teacher。代码如下:

  public class Teacher {
	private String name;
	private String source;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSource() {
		return source;
	}
	public void setSource(String source) {
		this.source = source;
	}
}

2、新建一个地址类Address。代码如下:

public class Address {
	private String province;
	private String city;
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
}

3、新建一个学生类Student。代码如下:

public class Student {
	private String name;
	private int age;
	private List<Address> addresses;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public List<Address> getAddresses() {
		return addresses;
	}
	public void setAddresses(List<Address> addresses) {
		this.addresses = addresses;
	}
}

4、新建课室类Room。代码如下:

 public class Room {
	private Teacher teacher;
	private List<Student> students;
	public Teacher getTeacher() {
		return teacher;
	}
	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
	public List<Student> getStudents() {
		return students;
	}
	public void setStudents(List<Student> students) {
		this.students = students;
	}
}

二、准备工作,使用第三方包

我们先使用Dom的方式解析XML,XML是一个具有结构化的文档,如果我们使用原始的IO流的方式解析就会很麻烦,也不能很好发挥XML的特点,JDK中也并没有提供解析XML的实现类,但是有很多第三方包的实现,我们可以利用这些第三方包的实现轻松的解析XML文件。

1、下载Dom4j.jar。首先你得上网下载这个jar包。

2、导入这个包。

步骤:

(1)建立一个lib的文件夹

attcontent/81e2abec-ad94-4a57-995e-ccc74960adef.png

(2)把要导入的包复制进来

attcontent/7623fb21-cfef-452c-9a6f-5d6b61fe8725.png

(3)选中包,点击右键,选中Build Path ,点击add to Build path。

attcontent/75eaa610-b5da-4729-875e-41eb14a5bea9.png



三、解析并封装XML文件

导入了Dom4j.jar包后我们就可以使用这个包的实现类,解析XML文件了。新建一个com.dao包,建立ReadXML类,实现解析XML,并把解析的结果封装到javaBean对象中。实现代码如下:

public class ReadXML {

	// 解析XML
	public Room read() throws DocumentException {
		Room room = new Room();
		Teacher teacher = new Teacher();
		List<Student> students = new ArrayList<Student>();

		// 1、把XMl加载到内存中。
		SAXReader reader = new SAXReader();
		Document document = reader.read("./xml/room2.xml");

		// 2、先读取根元素 Element
		Element rootElement = document.getRootElement();

		// 3、根据根元素获得其子元素
		Element teacherElement = rootElement.element("teacher");
		teacher.setName(teacherElement.elementText("name"));
		teacher.setSource(teacherElement.elementText("source"));
		// System.out.println(teacherElement.elementText("name"));

		/*
		  Element nameElement =teacherElement.element("name");
		  System.out.println(nameElement.getText());
		 */
		// 解析多个元素
		List<Element> studentsElements = rootElement.elements("student");
		for (int i = 0; i < studentsElements.size(); i++) {
			Element studentElement = studentsElements.get(i);
			Student student = new Student();

			student.setName(studentElement.elementText("name"));
			student.setAge(Integer.parseInt(studentElement.elementText("age")));

			// 解析多个元素
			List<Element> addressesElements = studentElement
					.elements("address");
			List<Address> addresses = new ArrayList<Address>();
			for (int j = 0; j < addressesElements.size(); j++) {
				Element addressElement = addressesElements.get(j);
				Address address = new Address();
				address.setProvince(addressElement.elementText("province"));
				address.setCity(addressElement.elementText("city"));

				// 添加到list中
				addresses.add(address);

			}
			student.setAddresses(addresses);

			students.add(student);
		}

		room.setStudents(students);
		room.setTeacher(teacher);
		return room;

	}


}

在这个类中写一个main方法测试。

 public static void main(String[] args) {
		ReadXML readXML = new ReadXML();
		try {
			Room room = readXML.read();
			System.out.println("教师的姓名:"+room.getTeacher().getName());
			System.out.println("学生对象:"+room.getStudents().size());
			System.out.println("第一个学生的姓名"+room.getStudents().get(0).getName());
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

这时候你可以非常方便的获得XML文件的信息了。