灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2393回复:0

SAX解析实例

楼主#
更多 发布于:2012-09-08 09:39

//以下代码统计url.xml文件中每个标签出现的次数  
package com.app;
import java.io.File;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class TagCounter extends DefaultHandler {
    // Hashtable用来记录tag出现的次数  
    private Hashtable tags;

    public void startDocument() throws SAXException {
        tags = new Hashtable();
    }

    // 解析完成后的工作  
    public void endDocument() throws SAXException {
        Enumeration e = tags.keys();
        while (e.hasMoreElements()) {
            String tag = (String) e.nextElement();
            int count = ((Integer) tags.get(tag)).intValue();
            System.out.println("Tag <" + tag + "> occurs " + count + " times");
        }
    }

    // 对每一个开始元属进行处理  
    public void startElement(String namespaceURI, String localName,
            String rawName, Attributes atts) throws SAXException {
        String key = rawName;
        Object value = tags.get(key);
        if (value == null) {
            // 如果是新标签,把它添加在Hastable中  
            tags.put(key, new Integer(1));
        } else {
            // 如果以前碰到过,得到其计数值,并加1  
            int count = ((Integer) value).intValue();
            count++;
            tags.put(key, new Integer(count));
        }
    }

    static public void main(String[] args) {
        String filename = null;
        filename = "url.xml";
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser saxParser = null;
        try {
            // 创建解析器SAXParser对象  
            saxParser = spf.newSAXParser();
            saxParser.parse(new File(filename), new TagCounter());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

//以下程序解析url.xml  
package com.app;
import java.io.File;
import java.io.IOException;
import java.util.Stack;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXXMLReader extends DefaultHandler {

    Stack tags = new Stack();
    // 用于保存解析出来的信息www.atcpu.com  
    String text = null;
    String url = null;
    String author = null;
    String description = null;
    String day = null;
    String year = null;
    String month = null;

    public void endDocument() throws SAXException {
        System.out.println("------解析结束--------");
    }

    public void startDocument() throws SAXException {
        System.out.println("------解析开始--------");
    }

    public void startElement(String p0, String p1, String p2, Attributes p3)
            throws SAXException {
        tags.push(p2);
    }

    public void endElement(String p0, String p1, String p2) throws SAXException {
        tags.pop();
        if (p2.equals("link"))
            parser();
    }

    public void characters(char[] p0, int p1, int p2) throws SAXException {
        // 察看栈顶元素,根据元素名称给对应的变量赋值  
        String tag = (String) tags.peek();
        if (tag.equals("text"))
            text = new String(p0, p1, p2);
        else if (tag.equals("url"))
            url = new String(p0, p1, p2);
        else if (tag.equals("author"))
            author = new String(p0, p1, p2);
        else if (tag.equals("day"))
            day = new String(p0, p1, p2);
        else if (tag.equals("month"))
            month = new String(p0, p1, p2);
        else if (tag.equals("year"))
            year = new String(p0, p1, p2);
        else if (tag.equals("description"))
            description = new String(p0, p1, p2);
    }

    private void parser() {
        System.out.print("Content: ");
        System.out.println(text);
        System.out.print("URL: ");
        System.out.println(url);
        System.out.print("Author: ");
        System.out.println(author);
        System.out.print("Date: ");
        System.out.println(day + "-" + month + "-" + year);
        System.out.print("Description: ");
        System.out.println(description);
        System.out.println();
    }

    static public void main(String[] args) {
        String filename = "url.xml";
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser saxParser = null;
        try {
            saxParser = spf.newSAXParser();
            saxParser.parse(new File(filename), new SAXXMLReader());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

喜欢0 评分0
游客

返回顶部