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实例

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,虽然如此,使用SAX的还是不少,几乎所有的XML解析器都会支持它。 与DOM比较而言,SAX是一种轻量型的方法...

Pull和SAX 解析的实例

  • 2016-03-18 16:43
  • 6.40MB
  • 下载

android开发(十八) SAX解析XML文件实例

SAX(Simple API for XML),是指一种接口,或者一个软件包。  DOM:文档驱动。DOM在解析文件之前把整个文档装入内存,处理大型文件时其性能很差,是由于DOM的树结构所造成的...

SAX解析XML POI解析Excel实例

  • 2017-09-29 11:35
  • 18.54MB
  • 下载

sax解析xml实例

sax 解析xml实例

abc.xml文件   张三 18 李四 19 王五 20 赵六 21 定义实体类 User.java packa...

sax解析xml实例

  • 2013-04-23 17:06
  • 154KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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