SAX解析

来源:互联网 发布:linux下mv命令 编辑:程序博客网 时间:2024/06/06 13:15

//stu.xml<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam><student><name>张三</name><location>西安</location><grade>98</grade></student><student><name>李四</name><location>临潼</location><grade>59</grade></student></exam>

sax_study.java

package com.SAX;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import com.student.Student;public class sax_study {public static void main(String[]args) throws ParserConfigurationException, SAXException, IOException{SAXParserFactory factory=SAXParserFactory.newInstance();SAXParser sp=factory.newSAXParser();XMLReader reader=sp.getXMLReader();BeanListHandler blh=new BeanListHandler();reader.setContentHandler(blh);reader.parse("src/stu.xml");ArrayList al=blh.getStudents();for(int j=0;j<al.size();++j){Student stu=(Student) al.get(j);System.out.println(stu.getName()+"---"+stu.getLocation()+"---"+stu.getGrade());}}}class BeanListHandler extends DefaultHandler{ArrayList  list=new ArrayList();String current_tag=null;Student stu=null;public ArrayList getStudents(){return list;}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if("student".equals(qName))       //避免空指针异常,所以把字符串变量放在后面{current_tag="student";stu=new Student();}else if("name".equals(qName)){current_tag="name";}else if("location".equals(qName)){current_tag="location";}else if("grade".equals(qName)){current_tag="grade";}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if("location".equals(current_tag ) ){stu.setLocation(new String(ch,start,length));}else if("grade".equals(current_tag)){stu.setGrade(Integer.parseInt(new String(ch,start,length)));}elseif("name".equals(current_tag)){stu.setName(new String(ch,start,length));}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if("student".equals(qName)){list.add(stu);stu=null;}current_tag=null;    //这句话千万不可省略,省略会报空指针异常,                                             //因为遇到结束标签时,stu被置为null,然后遇到空白文本,stu调用set方法,报错}}

Student.java

package com.student;public class Student {private  String name;private  String location;private int grade;public Student(String na,String lo,int gr){name=na;location=lo;grade=gr;}public Student(){}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}}

这种解析方式,在实际开发过程中比较常用应当掌握。

0 0
原创粉丝点击