加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析之SAX

发布时间:2020-12-15 22:39:15 所属栏目:百科 来源:网络整理
导读:这篇博文主要讨论XML解析中的SAX技术。 SAX解析概述: SAX采用事件处理的方式解析XML文件,利用SAX 解析XML 文档,涉及两个部分: 解析器 和 事件处理器 : 1.通过JAXP的API创建出 SAX解析器 ,然后通过解析器创建 XMLReader ,并给XMLReader设置 事件处理器

这篇博文主要讨论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);
		}
	};
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读