SAX解析实例

原创 2012年03月27日 09:35:08
//以下代码统计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();
	// 用于保存解析出来的信息
	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();
		}
	}
}


java--通过sax方式解析xml文件的简单实例

1.重写的继承自DefaultHandler的方法,部分代码如下: @Override public void startElement(String uri, String localName,...
  • a1491758730
  • a1491758730
  • 2015年10月18日 09:36
  • 779

XML解析之一——SAX解析详解

SAX解析 XML文档 Java Web
  • feichexia
  • feichexia
  • 2010年12月10日 17:19
  • 2292

Android中SAX解析XML文件

一、在assets文件中写一个xml文件 李明 30 李向梅 25 二、在service中写一个SAX解析的类 package com.example....
  • xueshuangshuang123
  • xueshuangshuang123
  • 2013年05月30日 17:40
  • 2881

Android:采用SAX解析XML实例

接着之前的部分现在要编写代码解析如下的person.xml文件 liming 30 x...
  • wade_chenw
  • wade_chenw
  • 2015年05月11日 16:57
  • 162

使用SAX方式解析XML

一、创建XML文件 目录结构: 二、新建一个带有main方法的类(SAXTest.java)public class SAXTest { public static void main(S...
  • L_in12
  • L_in12
  • 2016年07月13日 14:17
  • 5067

android中使用SAX解析xml(封装)

SAX具体怎么用就不说了,网上搜搜一大片。 第一步:建立公共抽象类BaseHandler package com.dc.handler; import java.io.StringRead...
  • gundumw100
  • gundumw100
  • 2017年04月10日 18:08
  • 269

Python中使用SAX解析XML及实例

在学习廖雪峰老师的Python教程时,学到了难以理解的关于SAX解析XML这一节。本文将从此节出发,逐句的分析此节的作业。其中作业来源于网友评论。 SAX解析XML速度快、占用内存小。我们只需要关注三...
  • wangxingfan316
  • wangxingfan316
  • 2017年08月11日 19:47
  • 919

XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象

Demo1类: import java.io.File; import java.util.List; import javax.xml.parsers.SAXParser; import ja...
  • qq_32059827
  • qq_32059827
  • 2016年05月31日 14:11
  • 888

XML解析之SAX解析过程代码详解

上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; ...
  • qq_32059827
  • qq_32059827
  • 2016年05月31日 13:12
  • 1012

DOM解析和SAX解析的区别

本文为转载,内容基本不变,格式用Markdown重排。 原文地址:DOM解析和SAX解析的区别 NO 区别 DOM解析 SAX解析 1 操作 将所有文件读取到内存中形成D...
  • hbwindy
  • hbwindy
  • 2016年05月11日 21:31
  • 3033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SAX解析实例
举报原因:
原因补充:

(最多只允许输入30个字)