使用SAX解析XML文件

来源:互联网 发布:基三捏脸数据正太 编辑:程序博客网 时间:2024/05/01 22:24

book.xml

<?xml version="1.0" encoding="GBK" ?><book>  <title>Java实例一百例</title>  <page id="1">    <title>基础知识篇</title>    <file>base.htm</file>  </page>  <page id="3">    <title>SWING篇</title>    <file>swing.htm</file>  </page>  <page id="28">    <title>EJB篇</title>    <file>ejb.htm</file>  </page>  <page id="33">    <title>DOM篇</title>    <file>xmldom.htm</file>  </page></book>
SaxParsePage.java
import javax.xml.parsers.*;import org.xml.sax.*;import org.xml.sax.helpers.*;import java.io.*;/** * <p>Title: 使用SAX解析XML</p> * <p>Description: 使用SAX接口解析book.xml文件</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Filename: SaxParsePage.java</p> */public class SaxParsePage extends DefaultHandler {/** *<br>方法说明:主方法,声明解析工厂和加载XML文件 *<br>输入参数: *<br>返回类型: */  public static void main(String[] argv) {    try {      //建立SAX解析工厂      SAXParserFactory spfactory = SAXParserFactory.newInstance();      //生成SAX解析对象      SAXParser parser = spfactory.newSAXParser();      //指定XML文件,进行XML解析      parser.parse(new File("book.xml"), new SaxParsePage());    } catch (Exception e) {      e.printStackTrace();    }  }/** *<br>方法说明:文件打开时调用 *<br>输入参数: *<br>返回类型: */  public void startDocument() {    System.out.println("***开始解析***");  }/** *<br>方法说明:当遇到开始标记时调用 *<br>输入参数: *<br>返回类型: */  public void startElement(String uri,                           String localName,                           String qName,                           Attributes attributes) throws SAXException {    System.out.println("节点开始:" + qName);    for(int i=0;i<attributes.getLength();i++){     System.out.println("节点属性名称:" + attributes.getQName(i));     System.out.println("节点属性值:"+attributes.getValue(i));    }  }/** *<br>方法说明:当分析器遇到无法识别为标记或者指令类型字符时调用 *<br>输入参数: *<br>返回类型: */  public void characters(char[] ch,                         int offset,                         int length) throws SAXException{    System.out.println("节点数据:" + new String(ch, offset, length));  }/** *<br>方法说明:当遇到节点结束时调用 *<br>输入参数: *<br>返回类型: */  public void endElement(String uri,                         String localName,                         String qName) {    System.out.println("节点结束:" + qName);  }/** *<br>方法说明:当到文档的末尾调用 *<br>输入参数: *<br>返回类型: */  public void endDocument() {    System.out.println("****文件解析完毕****");  }}