javaweb(一):sax解析xml

原创 2015年07月07日 01:14:32

需要两个组件:解析器和事件处理器

解析器逐行扫描文档,每次扫描都会触发事件处理器中的方法。

优点:不需要等待整个xml加载到内存,当解析到某一部分时,自动触发对应的方法去处理;不需要将整个文档加载到内存中;无论多大的xml,理论上都可以解析。

 缺点:每次解析都只能处理一次, 下次再想处理还要重新解析;只能进行查询,不能进行删改查的操作。

xml文件

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<书架>
	<书>
		<书名>JAVA教程</书名>
		<作者>boucher</作者>
		<售价>39.90</售价>
	</书>
	<书>
		<书名>数据结构</书名>
		<作者>joaner</作者>
		<售价>40.00</售价>
	</书>
</书架></span>

解析过程

第1-3步:

<span style="font-size:18px;">		//1、获取解析器工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//2、通过工厂获取sax解析器
		SAXParser parser = factory.newSAXParser();
		//3、获取读取器
		XMLReader reader = parser.getXMLReader();</span>

第4步:

<span style="font-size:18px;">reader.setContentHandler(/*自己选择*/);</span>

注册事件处理器,可以自己编写一个类实现ContentHandler接口,也可以直接new出来。

该接口中的主要方法有

<span style="font-size:18px;">			@Override
			public void startDocument() throws SAXException {
				System.out.println("开始解析");
			}
			@Override
			public void startElement(String uri, String localName, String qName,
					Attributes atts) throws SAXException {
				System.out.println("开始标签");				
			}
			@Override
			public void characters(char[] ch, int start, int length)
					throws SAXException {
				System.out.println(new String(ch,start,length));//打印标签体内容				
			}
			@Override
			public void endElement(String uri, String localName, String qName)
					throws SAXException {
				System.out.println("结束标签");				
			}
			@Override
			public void endDocument() throws SAXException {
				System.out.println("结束解析");				
			}</span>

实例

打印上述xml文件的第二本书的书名

<span style="font-size:18px;">	private String  name = null;
	private int count = 0;
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes atts) throws SAXException {
		this.name = qName;
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		this.name = null;
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if("书名".equals(name)&&++count==2){
			System.out.println(new String(ch,start,length));
		}
	}
</span>

其中在endElement方法中将name置为null,是为了防止打印出结束标签</书名>后面的回车换行制表符。



JavaWeb 之 XML文档的DOM和SAX解析方式详解

笔记摘要:       这里主要介绍了DOM与SAX两种解析思想,其中DOM解析的开发包有Ajax和DOM4j,对于DOM4j,其强大的功能,在XPath方面尤为抢眼,       XPath类似于正...

JavaWeb - XML解析 - SAX

sax解析2.xml W_Jp 271953489@qq.com W_Cc 109604484@qq.com C_Jm 879451036@qq.com...

Javaweb-xml编程-sax解析与实例

sax解析使用sax的原因 在使用DOM解析XML文档时,需要解读整个XML文档,在内存中的架构代表整个DOM树的document对象,从而再对XML进行操作; 在以上的情况下,如果XML文档特别大,...

JavaWeb-05 XML基础(Dom解析和Sax解析)

JavaWeb-05 JavaWeb-XML基础(Dom解析和Sax解析) 一、XML的概述(了解) eXtensible Markup Language 可扩展标记语言 宗旨是传输数据,而...

SAX类解析XML

  • 2016年06月17日 12:03
  • 1.47MB
  • 下载

Java SAX解析Xml文档Demo

  • 2017年08月18日 14:12
  • 13KB
  • 下载

使用SAX解析XML文件

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

xml sax解析

  • 2016年07月29日 09:38
  • 9KB
  • 下载

XML SAX解析

  • 2014年09月19日 17:41
  • 1.11MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javaweb(一):sax解析xml
举报原因:
原因补充:

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