package com.joker.sax;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.joker.vo.Student;
public class MyHandler extends DefaultHandler{
public List<Student> list=new ArrayList<Student>();
private Student student;
private String nowtag;//当前正在被解析的标签
//文档解析开始
@Override
public void startDocument() throws SAXException {
System.out.println("我要开始解析文档了");
}
//元素 标签 Element
//开始解析元素
public void startElement(
String uri,
String localName,
String qName,
Attributes attributes) throws SAXException {
//System.out.println("uri:"+uri+" localName:"+localName+" qName:"+qName);
//qName代表标签名
if(qName.equals("student")){
student=new Student();
//HashMap
String stuno=attributes.getValue("stuno");
//System.out.println(stuno);
student.setStuno(stuno);
}
System.out.println(qName);
nowtag=qName;//把正在被解析的标签给tagnow
}
//用来提供元素内容
//开始元素 startElement方法结束后调用一次
//结束元素 endElement方法结束后调用一次
public void characters(
char[] ch,
int start,
int length)
throws SAXException {
String value=new String(ch,start,length);
if (nowtag.equals("bzr")) {
System.out.println(value);
}else if(nowtag.equals("name")){
student.setName(value);
}else if(nowtag.equals("age")){
student.setAge(new Integer(value));
}else if(nowtag.equals("address")){
student.setAddress(value);
}
/*
String str=new String(ch);//通过字符数组创建字符串你
System.out.println("*************");
System.out.println(str);
System.out.println("*************");
*///整个文档
//元素内容
/*
System.out.println("***************");
System.out.println(value);
System.out.println("***************");
*/
}
//结束解析元素
public void endElement(String uri,
String localName,
String qName)
throws SAXException {
if (qName.equals("student")) {
list.add(student);
}
//qName
nowtag="";
}
//文档解析结束
@Override
public void endDocument() throws SAXException {
System.out.println("终于干完了...");
}
}
下面正八经儿解析
package com.joker;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.joker.sax.MyHandler;
import com.joker.vo.Student;
public class MySaxParser {
public static void main(String[] args) throws Exception{
//解析器工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//解析器(sax解析器是个傀儡,不干活 ,就相当于一台没有cpu的电脑)
SAXParser parser=factory.newSAXParser();
//电脑不能工作...
//没有处理器...
//电脑工作=cpu处理+数据
//数据
InputStream in=MySaxParser.class.getClassLoader().getResourceAsStream("students.xml");
//cpu
//创建cpu Handler
MyHandler handler=new MyHandler();
//让电脑使用cpu把数据处理了
parser.parse(in, handler);
//获取解析后的数据
List<Student> list=handler.list;
System.out.println("***************************");
for (Student stu:list) {
System.out.println(stu.getStuno()+" "+stu.getName()+" "+stu.getAge()+" "+stu.getAddress());
}
}
}