zoukankan      html  css  js  c++  java
  • 记录读取XML文件方式二

    记录:使用SAX方式读取,在速度上要优于DOM

     1 public class SchoolSax extends DefaultHandler {
     2     /**
     3      * 接收XML中所有有用的数据
     4      */
     5     private List<School> schoolList;
     6     /**
     7      * 临时变量
     8      */
     9     private School school;
    10     private SClass sClass;
    11     private Student student;
    12 
    13     public List<School> getSchoolList() {
    14         return schoolList;
    15     }
    16 
    17 
    18     /**
    19      * 文档接受文档开始的通知--此事件用于对象的初始化
    20      */
    21     @Override
    22     public void startDocument() throws SAXException {
    23         schoolList = new ArrayList<School>();
    24 
    25     }
    26 
    27     /**
    28      * 文档接受结束
    29      */
    30     @Override
    31     public void endDocument() throws SAXException {
    32 
    33     }
    34 
    35     @Override
    36     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    37         if (qName.equals(SchoolTag.SCHOOL)) {
    38             String schoolId = attributes.getValue(SchoolTag.ID);
    39             String schoolName = attributes.getValue(SchoolTag.NAME);
    40             school = new School(schoolId, schoolName);
    41         } else if (qName.equals(SchoolTag.CLASS)) {
    42             String sClassId = attributes.getValue(SchoolTag.ID);
    43             String sClassName = attributes.getValue(SchoolTag.NAME);
    44             sClass = new SClass(sClassId, sClassName, school);
    45         } else if (qName.equals(SchoolTag.STUDENT)) {
    46             String studentId = attributes.getValue(SchoolTag.ID);
    47             String studentName = attributes.getValue(SchoolTag.NAME);
    48             student = new Student(studentId, studentName, sClass);
    49         } else {
    50             System.out.println("其他的Tag:" + qName);
    51         }
    52     }
    53 
    54     @Override
    55     public void endElement(String uri, String localName, String qName) throws SAXException {
    56         if (qName.equals(SchoolTag.SCHOOL)) {
    57             this.schoolList.add(school);
    58         } else if (qName.equals(SchoolTag.CLASS)) {
    59             this.school.getsClassList().add(sClass);
    60         } else if (qName.equals(SchoolTag.STUDENT)) {
    61             this.sClass.getStudents().add(student);
    62         }
    63     }
    64 
    65     @Override
    66     public void characters(char[] ch, int start, int length) throws SAXException {
    67 
    68     }
    69 }

    Test:

     1 public class TestSax {
     2 
     3     public static void test(File file) throws Exception {
     4         SAXParserFactory factory = SAXParserFactory.newInstance();
     5         try {
     6             SAXParser saxParser = factory.newSAXParser();
     7             SchoolSax sax = new SchoolSax();
     8             //事件注册(允许多个接受者)
     9             saxParser.parse(file, sax);
    10             List<School> schoolList = sax.getSchoolList();
    11             for (School sch : schoolList) {
    12                 System.out.println(sch.getId() + "--" + sch.getName());
    13                 List<SClass> classList = sch.getsClassList();
    14                 for (SClass sclass : classList) {
    15                     System.out.println(sclass.getId() + "--" + sclass.getName());
    16                     List<Student> studentList = sclass.getStudents();
    17                     for (Student stu : studentList) {
    18                         System.out.println(stu.getId() + "--" + stu.getName());
    19                     }
    20                 }
    21             }
    22         } catch (Exception e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 
    27 
    28     public static void main(String[] args) {
    29         try {
    30             String path = TestSax.class.getResource("/").toURI().getPath();
    31             String pathFileName = path + "\School.xml";
    32             TestSax.test(new File(pathFileName));
    33         } catch (Exception e) {
    34             e.printStackTrace();
    35         }
    36     }
    37 }

    同DOM相比,处理同一个XML文档,SAX用时:1s 459ms,DOM用时:4s 621ms

  • 相关阅读:
    [CSS3 + HTML5] Modernizr
    [Javascript] Array methods in depth
    [Unit Testing] Node testing: Test api Get request
    [CSS3] Interactive Pseudo-Classes :link :visited :hover :active
    [Javascript] Intro to Recursion
    [Javascript ] Array methods in depth
    [Javascript] Advanced Reduce: Flatten, Flatmap and ReduceRight
    [Redux] Composition with Objects
    AI-Info-Micron-Insight:人如其食:人工智能和人类微生物组
    AI-Info-Micron-Insight:用内存解决方案演化神经网络智能
  • 原文地址:https://www.cnblogs.com/drnmmond/p/7680233.html
Copyright © 2011-2022 走看看