使用SAX解析XML文件

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("****文件解析完毕****");

  }

}

你可能感兴趣的:(使用SAX解析XML文件)