当前位置:编程学习 > JAVA >>

SAX解析实例

//以下代码统计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.zzzyk.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); 
   &nb
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,