XML解析之SAX

前端之家收集整理的这篇文章主要介绍了XML解析之SAX前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这篇博文主要讨论XML解析中的SAX技术。


SAX解析概述:

SAX采用事件处理的方式解析XML文件,利用SAX 解析XML 文档,涉及两个部分:解析器事件处理器

1.通过JAXP的API创建出SAX解析器,然后通过解析器创建XMLReader,并给XMLReader设置事件处理器

2.在解析xml文档不同组成部分时,会回调事件处理器的相应的回调函数,并会把解析到的xml文件内容作为方法的参数传递给事件处理器。

3.事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据

图解如下:


相比DOM解析SAX具有如下特点:
1.相比DOM解析需要将整个xml文件加载到内存中,SAX解析是一边读文档,一边对文档进行处理,及回调相应的函数
2.sax只能用于读取xml文件,无法进行更新操作

SAX常用事件如下:
startDocument() ----文档开始事件
startElement() ----元素开始事件
characters() ----文本元素事件
endElement() ----元素结束事件
endDocument() ----文档结束事件
图解如下:


下面展示SAX解析JUnit代码
解析的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<users>呵呵</users>

JUnit测试代码如下:
package neuq.test.sax;

import java.io.IOException;

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

import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class SAXTest {

	@Test
	public void testParseXMLBySAX() throws ParserConfigurationException,SAXException,IOException{
		//使用SAXParserFactory创建SAX解析工厂
		SAXParserFactory factory=SAXParserFactory.newInstance();
		//通过SAX解析工厂得到解析器对象
		SAXParser parser=factory.newSAXParser();
		//通过解析器对象得到一个XML读取器
		XMLReader reader=parser.getXMLReader();
		//设置读取器的事件处理器,直接创建ContentHandler的实现类DefaultHandler即可
		reader.setContentHandler(MyHandler);
		//解析xml文件
		reader.parse("src/neuq/test/sax/users.xml");
	}
	
	private ContentHandler MyHandler=new DefaultHandler(){

		public void startDocument() throws SAXException {
			System.out.println("startDocument ");
		}
		public void endDocument() throws SAXException {		
			System.out.println("endDocument ");		
		}


		public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
			System.out.println("startElement :"+qName+"---"+"AtrributeValue : "+attributes.getValue(1));
			
		}	
		public void characters(char[] ch,int start,int length)
				throws SAXException {
			System.out.println("characters : "+new String(ch,start,length));
		}
		public void endElement(String uri,String qName)
				throws SAXException {
			System.out.println("endElement :"+qName);
		}
	};
}

猜你在找的XML相关文章