SAX解析XML文件的简单应用

来源:互联网 发布:淘宝助理快递模板 编辑:程序博客网 时间:2024/05/01 22:05

SAX顺序读取XMl文件时,并非一次性将XML文件读到内存中去,而是一段一段的读到内存中。SAX的解析器是基于事件的模型,解析XML文件时会触发一系列事件。SAX占用内存小、处理灵活,对于手机端的开发比较适合。
如果需要对XMl文件反复操作,并且做修改等动作,SAX就不适合了。

案例:简单读取XMl文件中的内容

1、  通过继承DefaultHandler,并重写四个函数即可完成解析操作

public class MyXmlReadHandler extends DefaultHandler{private String tagName; private Student student = null;private List<Student> lists = null;  public List<Student> getLists() {return lists;}/** * 读取XML文件开始(初始化集合对象) */@Override     public void startDocument() throws SAXException {  lists = new ArrayList<Student>();      }    /** * 读取标签开始(初始化student对象) */    @Override      public void startElement(String uri, String localName, String qName,              Attributes attributes) throws SAXException {          tagName = qName;          if(tagName.equals("student")){              student = new Student();          }      }          /**     * 读取标签内容(给对象student属性赋值)     * 通过简单的if-else判断方式     */    @Override      public void characters(char[] ch, int start, int length)              throws SAXException {          if (tagName != null) {              String data = new String(ch, start, length);              if (tagName.equals("name")) {                  student.setName(data);              }else if (tagName.equals("age")) {                  student.setAge(data);              }else if (tagName.equals("sex")) {                  student.setSex(data);              }          }      }          /**     * 读取标签内容结束(给集合对象赋值)     * 并注意:tagName = null      */    @Override      public void endElement(String uri, String localName, String qName)              throws SAXException {          if(qName.equals("student")){              lists.add(student);          }          tagName = null;      }  }

2、  调用方法

public class XmlSax {public static void main(String[] args) throws Exception {InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("students.xml");MyXmlReadHandler readHandler = new MyXmlReadHandler();           SAXParserFactory factory = SAXParserFactory.newInstance();          SAXParser sp = factory.newSAXParser();          sp.parse(ins, readHandler);          ins.close();                  List<Student> lists = readHandler.getLists();        for (Student person : lists) {        System.out.println("--------------");        System.out.println("name:"+person.getName());        System.out.println("age:"+person.getAge());        System.out.println("sex:"+person.getSex());}        }}

3、  XML文件

<?xml version="1.0" encoding="UTF-8"?><students><student id='0001'><name>stu01</name><age>20</age><sex>男</sex></student><student id='0002'><name>stu02</name><age>22</age><sex>女</sex></student></students>

4、  执行结果


0 0