记录读取xml文件内容

记录下使用document类去读取xml文件内容

xml内容:

 1 <?xml version="1.0" encoding = "UTF-8"?>
 2 <schools>
 3     <school id="1" name="school1">
 4         <class id="11" name="class11">
 5             <student id="111" name="student111"/>
 6             <student id="112" name="student112"/>
 7             <student id="113" name="student113"/>
 8         </class>
 9         <class id="12" name="class12">
10             <student id="121" name="student121"/>
11             <student id="122" name="student122"/>
12         </class>
13         <class id="13" name="class13">
14             <student id="131" name="student131"/>
15             <student id="132" name="student132"/>
16         </class>
17     </school>
18     <school id="2" name="school2">
19         <class id="21" name="class21">
20             <student id="211" name="student211"/>
21         </class>
22     </school>
23 </schools>

使用getElementsByTagName读取文件

定义学校类: 

 1 public class School {
 2 
 3     private String name;
 4     private String id;
 5     private List<SClass> sClassList;
 6 
 7     public School(String name, String id) {
 8         this.name = name;
 9         this.id = id;
10         sClassList = new ArrayList<SClass>();
11     }
12 
13     public String getName() {
14         return name;
15     }
16 
17     public String getId() {
18         return id;
19     }
20 
21     public List<SClass> getsClassList() {
22         return sClassList;
23     }
24 }

 

定义班级类:

 1 public class SClass {
 2     private String id;
 3     private String name;
 4     private School school;
 5     private List<Student> students;
 6 
 7 
 8     public SClass(String id, String name, School school) {
 9         this.id = id;
10         this.name = name;
11         this.school = school;
12         students = new ArrayList<Student>();
13         school.getsClassList().add(this);
14     }
15 
16     public String getId() {
17         return id;
18     }
19 
20 
21     public String getName() {
22         return name;
23     }
24 
25 
26     public School getSchool() {
27         return school;
28     }
29 
30 
31     public List<Student> getStudents() {
32         return students;
33     }
34 }
 

定义学生类:

 1 public class Student {
 2     private String id;
 3     private String name;
 4     private SClass sClass;
 5 
 6 
 7     public Student(String id, String name, SClass sClass) {
 8         this.id = id;
 9         this.name = name;
10         this.sClass = sClass;
11         sClass.getStudents().add(this);
12     }
13 
14     public String getId() {
15         return id;
16     }
17 
18     public String getName() {
19         return name;
20     }
21 
22     public SClass getsClass() {
23         return sClass;
24     }
25 }

定义读取xml类:

 1 public class SchoolDOM {
 2     private Document document;
 3 
 4     public SchoolDOM(File file) {
 5         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();     //DOM树的解析器
 6         try {
 7             DocumentBuilder documentBuilder = factory.newDocumentBuilder();
 8             document = documentBuilder.parse(file);
 9         } catch (Exception e) {
10             e.printStackTrace();
11         }
12     }
13 
14     /**
15      * parse school.xml,返回所有学校、班级、学生的信息
16      *
17      * @return
18      */
19     public List<School> parseSchoolXml() {
20         List<School> schools = null;
21         if (document != null) {
22             schools = new ArrayList<School>();
23             NodeList schoolList = document.getElementsByTagName(SchoolTag.SCHOOL);          //学校的节点
24             for (int i = 0; i < schoolList.getLength(); i++) {
25                 Node schoolNode = schoolList.item(i);
26                 if (schoolNode.getNodeType() == Node.ELEMENT_NODE) {
27                     Element schoolElement = (Element) schoolNode;               //把节点(node)强转成元素(element)
28                     String schoolID = schoolElement.getAttribute(SchoolTag.ID);
29                     String schoolName = schoolElement.getAttribute(SchoolTag.NAME);
30                     School school = new School(schoolID, schoolName);
31                     schools.add(school);
32                     NodeList classList = schoolElement.getChildNodes();                   //班级的节点
33                     for (int j = 0; j < classList.getLength(); j++) {
34                         Node classNode = classList.item(j);
35                         if (classNode.getNodeType() == Node.ELEMENT_NODE) {
36                             Element classElement = (Element) classNode;
37                             String classID = classElement.getAttribute(SchoolTag.ID);
38                             String className = classElement.getAttribute(SchoolTag.NAME);
39                             SClass sclass = new SClass(classID, className, school);
40                             NodeList studentList = classElement.getChildNodes();              //学生的节点
41                             for (int k = 0; k < studentList.getLength(); k++) {
42                                 Node studentNode = studentList.item(k);
43                                 if (studentNode.getNodeType() == Node.ELEMENT_NODE) {
44                                     Element studentElement = (Element) studentNode;
45                                     String studentID = studentElement.getAttribute(SchoolTag.ID);
46                                     String studentName = studentElement.getAttribute(SchoolTag.NAME);
47                                     Student student = new Student(studentID, studentName, sclass);
48                                 }
49                             }
50                         }
51                     }
52                 }
53             }
54         }
55 
56         return schools;
57     }
58 }

定义Tag常量

 1 public class SchoolTag {
 2 
 3     public static final String SCHOOL = "school";
 4     public static final String CLASS = "class";
 5     public static final String STUDENT = "student";
 6     public static final String ID = "id";
 7     public static final String NAME = "name";
 8 
 9 
10 }

测试方法

 1 public class TestDom {
 2     public static void test() {
 3         try {
 4             String path = TestDom.class.getResource("/").toURI().getPath();
 5             String pathFileName = path + "\\School.xml";
 6             File file = new File(pathFileName);
 7             SchoolDOM schoolDOM = new SchoolDOM(file);
 8             List<School> schools = schoolDOM.parseSchoolXml();
 9             for (School school : schools) {
10                 System.out.println(school.getId() + "---" + school.getName());
11                 List<SClass> classList = school.getsClassList();
12                 for (SClass sclass : classList) {
13                     System.out.println(sclass.getId() + "--" + sclass.getName());
14                     List<Student> students = sclass.getStudents();
15                     for (Student student : students) {
16                         StringBuilder stringBuilder = new StringBuilder();
17                         stringBuilder.append(student.getId());
18                         stringBuilder.append("--");
19                         stringBuilder.append(student.getName());
20                         System.out.println(stringBuilder);
21                     }
22                 }
23             }
24 
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28     }
29 
30 
31     public static void main(String[] args) {
32         TestDom.test();
33     }
34 }

输出结果

school1---1
11--class11
111--student111
112--student112
113--student113
12--class12
121--student121
122--student122
13--class13
131--student131
132--student132
school2---2
21--class21
211--student211

 

posted @ 2017-10-13 11:44  转圈又是原点  阅读(491)  评论(0编辑  收藏  举报