俊星的BLOG

JAVA SAX之简单实用

SAX是Simple API for XML的缩写(官网:saxproject),一个用来解决大型XML文档读取的接口,下面是我的简单试用:
import java.io.FileInputStream;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 需要继承自DefaultHandler
 * 
@author kinkding
 
*/

public class Test extends DefaultHandler {
    
protected StringBuffer bodyText = new StringBuffer();
    
private int level = 0;
    
    
/** 开始解析元素 */
    
public void startElement(String namespaceURI, String localName, String fullName, Attributes attributes)
            
throws SAXException {
        System.out.print(getPrefix() 
+ "<" + fullName + "(");
        
for (int i = 0; i < attributes.getLength(); i++{
            String temp 
= attributes.getQName(i);
            String value 
= attributes.getValue(i);
            System.out.print(temp 
+ ":" + value + " ");
        }

        System.out.println(
")>");
        level
++;
    }

    
    
/** 元素间内容的处理 */
    
public void characters(char buffer[], int start, int length) throws SAXException {
        bodyText.append(buffer, start, length);
    }

    
    
/** 结束元素的解析 */
    
public void endElement(String namespaceURI, String localName, String fullName) throws SAXException {
        System.out.println(getPrefix() 
+ bodyText.toString().trim());
        bodyText 
= new StringBuffer();
        level
--;
        System.out.println(getPrefix() 
+ "<" + fullName + ">");
    }


    
private String getPrefix() {
        String s 
= "";
        
for (int i = 0; i < level; i++{
            s 
+= " ";
        }

        
return s;
    }


    
public XMLReader getReader() throws Exception {
        SAXParser parser 
= SAXParserFactory.newInstance().newSAXParser();
        XMLReader reader 
= parser.getXMLReader();
        reader.setDTDHandler(
this);
        reader.setContentHandler(
this);
        reader.setEntityResolver(
this);
        reader.setErrorHandler(
this);
        
return reader;
    }


    
public static void main(String[] args) throws Exception {
        Test t 
= new Test();
        XMLReader reader 
= t.getReader();
        reader.parse(
new InputSource(new FileInputStream("test.xml")));
    }

}

test.xml文件内容如下:
<?xml version='1.0'?>
<table name="job" code="1234">
    
<tr>我的家</tr>
    
<td colspan="2">生命就像一条大河</td>
    
<td colspan="3">goodjob</td>
</table>

输出如下:
<table(name:job code:1234 )>
 <tr()>
  我的家
 <tr>
 <td(colspan:
2 )>
  生命就像一条大河
 <td>
 <td(colspan:
3 )>
  goodjob
 <td>
 
<table>

posted on 2009-04-30 20:29 俊星 阅读(163) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: