9.29 XML 随笔

放假喽~ 雷哥嗓子都那样了 还给偶们讲课。 很感动, 长感动, 雷哥 您辛苦了。 好好享受偶们送给你的水果吧。

XML解析方式分为两种:dom和sax

昨天主要说了dom解析,今天主要说说sax解析

在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。

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

解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。

解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。

事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。

SAX方式解析XML文档

使用SAXParserFactory创建SAX解析工厂

SAXParserFactory spf = SAXParserFactory.newInstance();

通过SAX解析工厂得到解析器对象

SAXParser sp = spf.newSAXParser();

通过解析器对象得到一个XML的读取器

XMLReader xmlReader = sp.getXMLReader();

设置读取器的事件处理器

xmlReader.setContentHandler(new BookParserHandler());

解析xml文件

xmlReader.parse("book.xml");

SAX解析编程

方法摘要

void

characters(char[] ch, int start, int length)
接收元素中字符数据的通知。

void

endDocument()
接收文档结束的通知。

void

endElement(String uri, String localName, String qName)
接收元素结束的通知。

void

endPrefixMapping(String prefix)
接收名称空间映射结束的通知。

void

error(SAXParseException e)
接收可恢复的解析器错误的通知。

void

fatalError(SAXParseException e)
报告严重的 XML 解析错误。

void

ignorableWhitespace(char[] ch, int start, int length)
接收元素内容中可忽略空白的通知。

void

notationDecl(String name, String publicId, String systemId)
接收注释声明的通知。

void

processingInstruction(String target, String data)
接收处理指令的通知。

InputSource

resolveEntity(String publicId, String systemId)
解析外部实体。

void

setDocumentLocator(Locator locator)
接收文档事件的 Locator 对象。

void

skippedEntity(String name)
接收跳过的实体的通知。

void

startDocument()
接收文档开始的通知。

void

startElement(String uri, String localName, String qName, Attributes attributes)
接收元素开始的通知。

void

startPrefixMapping(String prefix, String uri)
接收名称空间映射开始的通知。

void

unparsedEntityDecl(String name, String publicId, String systemId, String notationName)
接收未解析实体声明的通知。

void

warning(SAXParseException e)
接收解析器警告的通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值