ContentHandlerImpl.java

package cn.com.csuinfosoft.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 cn.com.csuinfosoft.vo.BookVo;

/**
 * title:事件处理接口  ContentHandler DefaultHandler
 * @author Administrator   
 *
 */
public class ContentHandlerImpl extends DefaultHandler{
 
 private BookVo vo = null;
 private List bookList = null;
 private String elementName = "";
 
 //加载XML文档,触发
 public void startDocument() throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "startDocument" );
  
  bookList = new ArrayList();
    
 }
 
 //解析开始的标记,触发  arg0,arg1:命名空间,前缀   arg2:标记名字 arg3:属性
 public void startElement(String arg0, String arg1, String arg2,
   Attributes arg3) throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "startElement:======================="+arg2 );
  
  //如果是book标记,获取id属性值
  if( arg2.equals( "book" ) ){
   
   vo = new BookVo();
   
   vo.setBookId( arg3.getValue( "id" ) );
   //list add
   bookList.add( vo );
  }
  
  elementName = arg2;
  System.out.println("arg2:" + arg2);
 }
 
 //解析标记中的内容,触发   arg0:文本内容   arg1:开始位置   arg2:结束位置
 public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "characters=================="+new String( arg0,arg1,arg2 ) );
  System.out.println( "elementName:"+elementName );
  
  if( elementName.equals( "bookname" ) ){
   
   vo.setBookName( new String(arg0,arg1,arg2) );
  }else if( elementName.equals( "author" ) ){
   
   vo.setAuthor( new String(arg0,arg1,arg2) );
  }else if( elementName.equals( "price" ) ){
   
   vo.setPrice( new String(arg0,arg1,arg2) );
  }else if( elementName.equals( "age" ) ){
   
   vo.setAge( new String(arg0,arg1,arg2) );
  }else if( elementName.equals( "type" ) ){
   
   vo.setType( new String(arg0,arg1,arg2) );
  }
 
 }

 //解析标记结束,触发
 public void endElement(String arg0, String arg1, String arg2)
   throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "endElement" );
  elementName = "";
 }
 
 //XML文档解析完,触发
 public void endDocument() throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "endDocument" );
  
 }

 //getList
 public List getBookList(){
  
  return this.bookList;
 }
 
 /*
 
 characters(char[] ch, int start, int length)
    接收字符数据的通知。
void endDocument()
    接收文档的结尾的通知。
void endElement(String uri, String localName, String qName)
    接收元素结束的通知。
void endPrefixMapping(String prefix)
    结束前缀 URI 范围的映射。
void ignorableWhitespace(char[] ch, int start, int length)
    接收元素内容中可忽略的空白的通知。
void processingInstruction(String target, String data)
    接收处理指令的通知。
void setDocumentLocator(Locator locator)
    接收用来查找 SAX 文档事件起源的对象。
void skippedEntity(String name)
    接收跳过的实体的通知。
void startDocument()
    接收文档的开始的通知。
void startElement(String uri, String localName, String qName, Attributes atts)
    接收元素开始的通知。
void startPrefixMapping(String prefix, String uri)
    开始前缀 URI 名称空间范围映射。

 
 
 
 
 

 public void endPrefixMapping(String arg0) throws SAXException {
  // TODO Auto-generated method stub
  
 }

 public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
   throws SAXException {
  // TODO Auto-generated method stub
  
 }

 public void processingInstruction(String arg0, String arg1)
   throws SAXException {
  // TODO Auto-generated method stub
  
 }

 public void setDocumentLocator(Locator arg0) {
  // TODO Auto-generated method stub
  
 }

 public void skippedEntity(String arg0) throws SAXException {
  // TODO Auto-generated method stub
  
 }

 

 public void startPrefixMapping(String arg0, String arg1)
   throws SAXException {
  // TODO Auto-generated method stub
  
 }
*/
}
 

ErrorHandlerImpl.java

package cn.com.csuinfosoft.sax;

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

/**
 * title:异常处理类
 * @author Administrator
 *
 */
public class ErrorHandlerImpl implements ErrorHandler{

 public void error(SAXParseException arg0) throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "error:"+arg0.toString() );
 }

 public void fatalError(SAXParseException arg0) throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "fatalError:"+arg0.toString() );
 }

 public void warning(SAXParseException arg0) throws SAXException {
  // TODO Auto-generated method stub
  System.out.println( "warning:"+arg0.toString() );
 }

}
 

Test.java

package cn.com.csuinfosoft.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.csuinfosoft.vo.BookVo;

/**
 * title:sax parser xml
 * @author Administrator
 *
 */
public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //1:创建SAXParserFactory
  javax.xml.parsers.SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
  
  try {
   //2:创建SAXParser
   SAXParser saxParser = saxParserFactory.newSAXParser();
   
   //3:XMLReader 注册事件,加载XML文档 
   XMLReader xmlReader = saxParser.getXMLReader();
   
   //实例事件处理类
   ContentHandlerImpl contentHandler = new ContentHandlerImpl();
   
   //4:注册事件处理类
   xmlReader.setContentHandler( contentHandler );
   
   //注册错误处理类
   xmlReader.setErrorHandler( new ErrorHandlerImpl() );
   
   //5:加载XML文档 parse方法
   //必须先注册事件,再加载文档,因为加载文档的同时,也会去解析.
   xmlReader.parse( "bookinfo.xml"  );
   
   //获取书籍信息
   List<BookVo> list = contentHandler.getBookList();
   
   for( BookVo vo:list ){
    
    System.out.println( "+++++++++++++++++++++++++++++++++++++++++++++++++++" );
    System.out.println( "bookId:"+vo.getBookId() );
    System.out.println( "bookName:"+vo.getBookName() );
    System.out.println( "author:"+vo.getAuthor() );
    System.out.println( "price:"+vo.getPrice() );
    System.out.println( "age:"+vo.getAge() );
    System.out.println( "type:"+vo.getType() );
    
   }
   
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }