一套完整的SAX的例子

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

//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+">");

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有