SAX解析

来源:互联网 发布:长春市盘古网络 法人 编辑:程序博客网 时间:2024/04/27 17:10
package cn.itcast;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class MyDefaultHandler extends DefaultHandler {    private String qName;    private Student student;    private String node;    private boolean flag = false;    public static List<Student>list = null;    @Override    public void startDocument() throws SAXException {        super.startDocument();        list = new ArrayList<>();//在文档开始出创建一个集合用于存储学生对象    }    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        super.startElement(uri, localName, qName, attributes);        flag = true;//标志着标签的开始        this.qName = qName;        if(qName.equals("student")){            student = new Student();            String value = attributes.getValue(0);//获取学生的属性            student.setId(value);        }        node = qName;    }    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        super.characters(ch, start, length);        if(!flag){//如果flag为true则表示开始标签,需要对student对象属性设置,如果为false则表示结束标签,不进行student的属性设置            return;        }        switch(node){            case "name"://name有两个结点,一个是开始标签一个是结束标签。而开始标签和结束标签执行完后都是文本。                String strName = new String(ch,start,length);                student.setName(strName);//设置姓名                break;            case "age":                String str = new String(ch,start,length);                int age = Integer.parseInt(str);                student.setAge(age);//设置年龄                break;            case "sex":                student.setSex(new String(ch,start,length));//设置性别                break;        }    }    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        super.endElement(uri, localName, qName);        flag = false;//表示标签的结束        if(qName.equals("student")){//碰到student结束标签则把student添加到集合中            list.add(student);        }    }    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument();    }}
package cn.itcast;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;public class SAXParserDemo {    public static void main(String[] args) throws Exception {        //创建一个SAXParser工厂        SAXParserFactory saxPareserFactory = SAXParserFactory.newInstance();        //通过工厂生产一个SAXParser        SAXParser newSAXParser = saxPareserFactory.newSAXParser();        newSAXParser.parse("Student.xml", new MyDefaultHandler());        List<Student> list = MyDefaultHandler.list;        for(Student stu : list){            System.out.println(stu);        }    }}
0 0
原创粉丝点击