package cn.com.xml.vo;
public class RosterVo {
private String id; //学号
private String name; //学生姓名
private String age; //年龄
private String skill; //科目
private String score; //分数
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
}
===============================
package cn.com.xml.sax;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import cn.com.xml.vo.RosterVo;
public class ContentHanderImpl implements ContentHandler {
private RosterVo vo=null;
private List list=null; //存放多个list
private String elementName=null; //节点名字 ,作为标识
//解析xml文檔時候触发
public void startDocument() throws SAXException {
System.out.println("startDocument.....");
list=new ArrayList();
}
//解析xml文档中元素节点的时候触发 qName:节点名字 atts:属性
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("startElement----"+qName);
if(qName.equals("student")){
vo=new RosterVo();
//获取指定属性的内容
vo.setId(atts.getValue("id"));
list.add(vo);//把vo存入集合中
}else{
elementName=qName;
}
}
//解析元素节点中内容的时候触发<接收来自xml文档的字符> ch:内容 start:开始 length:从字符中读取字符的个数
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("reading characters....."+new String(ch,start,length));
if(elementName.equals("name")){
vo.setName(new String(ch,start,length));
}else if(elementName.equals("age")){
vo.setAge(new String(ch,start,length));
}else if(elementName.equals("skill")){
vo.setSkill(new String(ch,start,length));
}else if(elementName.equals("score")){
vo.setScore(new String(ch,start,length));
}
}
//解析节点结束的时候触发
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("endElement.....");
}
//文档结束的时候触发
public void endDocument() throws SAXException {
System.out.println("endDocument.......");
}
public void endPrefixMapping(String prefix) throws SAXException {
System.out.println("endPrefixMapping.....");
}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
System.out.println("ignorableWhitespace.......");
}
public void processingInstruction(String target, String data)
throws SAXException {
}
public void setDocumentLocator(Locator locator) {
}
public void skippedEntity(String name) throws SAXException {
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
}
//返回vo集合
public List getList(){
return this.list;
}
}
=====================================
package cn.com.xml.sax;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class ErrorHanderImpl implements ErrorHandler {
public void error(SAXParseException e) throws SAXException {
System.out.println("error"+e.getMessage());
}
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("fatalError"+e.getMessage());
}
public void warning(SAXParseException e) throws SAXException {
System.out.println("warning"+e.getMessage());
}
}
===================================
package cn.com.xml.sax;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import cn.com.xml.vo.RosterVo;
public class TestSAX {
/**
* SAX解析
*/
public static void main(String[] args) {
//创建一个工厂(工厂用来生成SAX解析器的)
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
//工厂创建一个sax解析器
SAXParser saxParser= factory.newSAXParser();
//通过解析器获取一个xml阅读器,用来读取xml文档
XMLReader xmlReader=saxParser.getXMLReader();
//监听器类
ContentHanderImpl contentHander=new ContentHanderImpl();
//在当前的xmlReader中注册一个监听器
xmlReader.setContentHandler(contentHander);
//注册一个错误处理监听器
xmlReader.setErrorHandler(new ErrorHanderImpl());
//加载指定的xml
xmlReader.parse("roster.xml");
//返回Vo集合
List list=contentHander.getList();
for(int i=0,n=list.size();i<n;i++){
RosterVo vo=(RosterVo)list.get(i);
System.out.println("====================");
System.out.println("学号:"+vo.getId());
System.out.println("姓名:"+vo.getName());
System.out.println("年龄:"+vo.getAge());
System.out.println("科目:"+vo.getSkill());
System.out.println("成绩:"+vo.getScore());
}
} catch (ParserConfigurationException e) {
System.out.println("创建解析器的时候出现ParserConfigurationException"+e.getMessage());
} catch (SAXException e) {
System.out.println("创建解析器的时候出现SAXException e"+e.getMessage());
} catch (IOException e) {
System.out.println("加载xml文件时候报错"+e.getMessage());
}
}
}