使用SAX解析XML文件

<?xml version="1.0" encoding="utf-8" ?>
<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>
 

 

 

package jp.co.fujixerox.pemaster.grc.server.module.admin.definition;

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章