zoukankan      html  css  js  c++  java
  • 记录读取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
  • 相关阅读:
    进阶篇:3.1.8)DFM塑胶-注射模具和设备
    PAT-甲级-1001-A+B Format
    腾讯-004-两个排序数组的中位数
    机器学习三 决策树
    腾讯-002-两数相加
    2018.3.15
    2018.3.14
    2018.3.13
    废代码合集
    边缘检测程序(matlab)
  • 原文地址:https://www.cnblogs.com/drnmmond/p/7660403.html
Copyright © 2011-2022 走看看