12、使用java的Dom4J解析XML

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度

学习过程:

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

一、封装对象

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

  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。代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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。代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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。代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 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对象中。实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

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方法测试。

1

2

3

4

5

6

7

8

9

10

11

12

13

 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文件的信息了。

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83832766