一套完整的SAX的例子

类别:.NET开发 点击:0 评论:0 推荐:

//MySAXExample.java
/**
*SAX作为一种处理模型非常简单,基本由如下三个步骤组成:
*1、实现一个扩展DefaultHandler的类,作为每种类型的结构包含回调(callback)方法,而这些类型的结构是在包含了基于您需要的实现方案中找到的
*2、初始化一个新的SAX Parser类。Parser读取XML源文件,并触发DefaultHandler类中所实现的一个回调方法
*3、顺序读取XML源文件。在顺序读取中,无法随机访问结构中的元素。剩下的工作取决于Handler类中您的实现方案.
*/

import javax.xml.parsers.*;

class MySAXExample{
 public MySAXExample(){}

 public static void main(String[] args){
  try{
   /**
    * 利用SAXParserFactory的静态newInstance()方法获取一个factory类
    */
          
   SAXParserFactory factory = SAXParserFactory.newInstance();
   
   /**
    * 通过调用newSAXParser()静态方法从factory中获取SAX分析器
    */
   
   SAXParser parser = factory.newSAXParser();
   
   /**
    * 分析XML数据:调用SAXParser的分析方法,把XML输入作为第一个参数,而DefaultHandler实现方案作为第二个参数
    */
   
   parser.parse("PurchaseOrder.xml",new MySAXExampleHandler());
  }
  /**
   * 使用的factory类是作为系统属性、jar服务或者平台的默认值提供的。如果属性在运行时没有找到,则抛出一个FactoryConfigurationError
   * 错误,同时给出一条消息,说明问题的起因。分析器factory可以经过补充配置,以创建验证和(或)支持命名空间分析器的实例。分析器没有返回
   * 属性时,抛出一个ParserConfigurationException异常。
   */
  
  catch(FactoryConfigurationError fce){
   System.out.println("FactoryConfiguration occurred:"+fce);
  }
  catch(ParserConfigurationException pce){
   System.out.println("ParserConfigurationException occurred:"+pce);
  }
  catch(Exception e){
   System.out.println("Exception occurred:"+e);
  }
 }
}

//****************************************************************************************
//MySAXExampleHandler.java
import org.xml.sax.*;
//import org.xml.sax.helpers;
//import org.xml.sax.ext.*;
import org.xml.sax.helpers.DefaultHandler;

/**
*JAXP特有的SAX处理XML步骤如下:
*1、获取Factory和Parser类来实现XML处理。
*2、设置命名空间、有效性验证等选项以及功能。
*3、创建一个DefaultHandler实现方案类。
*/
public class MySAXExampleHandler extends DefaultHandler{
 
 public MySAXExampleHandler(){}
 
 public void startDocument() throws SAXException{    //startDocument():仅在XML文档开始时调用该方法
  System.out.println("START DOCUMENT");
  System.out.println("<?xml version='1.0'?>");
 }
 
 public void endDocument() throws SAXException{    //endDocument():当分析器到达XML文档的末端时调用该方法
  System.out.println("END DOCUMENT");
 }
 
 public void characters(char bur[],               //characters():对元素中包含的字符数据调用该方法
                  int offset,
         int len)
                        throws SAXException{
  String s = new String(bur,offset,len);
  System.out.println(s);
 }
 
 public void startElement(String namespaceURI,  //startElement():每次遇到一个新的开始标记或者元素时(例如,<element>),就调用该方法
                          String localName,    
        String rawName,       
        Attributes attrs)
        throws SAXException{
   System.out.print("<"+localName);
   int length = attrs.getLength();
   for(int i=0;i<length;i++){
    System.out.print(""+attrs.getLocalName(i)+
               "="+attrs.getValue(i));
   }
   System.out.println(">");
        }
 
 public void endElement(String namespaceURI,  //endElement():当元素结束时(例如,<element>,就调用该方法
                  String localName,
         String rawName)
                        throws SAXException{
  System.out.println("</"+localName+">");
 }
}

 

本文地址:http://com.8s8s.com/it/it41925.htm