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

|