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
  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/drnmmond/p/7660403.html
Copyright © 2011-2022 走看看