SAX解析XML

1.首先建立事件监听器类:
 
package com.wch.dom;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import javax.xml.namespace.QName;

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

public class MySaxHandler extends DefaultHandler {
	static DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
	private String content;
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		content = new String(ch,start,length);
	}
	
	@Override
	public void endElement(String uri, String localName, String aName)

			throws SAXException {
		// TODO Auto-generated method stub
		if ("title".equals(aName)) {
			System.out.println("标题:"+content);
		}else
		if ("author".equals(aName)) {
			System.out.println("作者:"+content);
		}else
		if("email".equals(aName))
		{
			System.out.println("email:"+content);
		}else
		if("date".equals(aName))
		{
			System.out.println("date:"+content);
		}
	}
	@Override
	public void startElement(String uri, String localName, String aName,
			Attributes attri) throws SAXException {
		// TODO Auto-generated method stub
		if("article".equals(aName))
		{
			System.out.println("\r\n找到第一篇文章,所属分类:"+attri.getValue("category"));
		}
	}
}
 
 
2.建立测试类:
package com.wch.dom;

import java.io.File;

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

import org.junit.Test;
import org.xml.sax.SAXException;

public class SaxXml {
	@Test
	public void test()
	{
		//创建解析XML的对象
		File xmlFile = new File("E:/Eclipse1/DomXml/src/com/wch/xml/NewFile.xml");
		//创建SAXParserFactory对象
		SAXParserFactory sf = SAXParserFactory.newInstance();
		try {
			//创建SAXParser对象
			SAXParser sp = sf.newSAXParser();
			//解析文件,定义解析时的事件处理
			sp.parse(xmlFile, new MySaxHandler());
		} 
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
3.测试结果:

找到第一篇文章,所属分类:xml 标题:XML 概述 作者:janet email:janetval@yahoo.com.cn date:20080809

找到第一篇文章,所属分类:java 标题:Java书籍 作者:XXX君 email:XXXX@163.com date:20100212

总结:SAX与DOM是两种功能差不多但是底层实现不太一样的解析方式。DOM在解析的时候会把整个XML文件全部映射为Document里的树状结构。对于小的XML文件使用还是挺方便的,但是遇到比较大的XML文件的时候,DOM的缺点就暴露了,它的内存占用较大,而且查找速度比较慢。
     SAX就是针对这种情况出现的解决方案:SAX解析器对XML文档会从XML文档开发的位置进行解析,同时根据已经定义好的事件处理器来决定当前所解析的部分是否有必要记录并存储。SAX解析是事件驱动的,所以在解析XML文件的时候需要定义监听器对象(如上面的MySaxHandler)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值