Java SAX Parser - 概述

SAX(Simple API for XML)是一种基于事件的XML文档解析器.与DOM解析器不同,SAX解析器不会创建解析树. SAX是XML的流式接口,这意味着使用SAX的应用程序从文档顶部开始按顺序接收有关正在处理的XML文档的元素和属性的事件通知,并以关闭ROOT元素.

  • 从上到下读取XML文档,识别构成格式良好的XML文档的标记.

  • 代币的处理顺序与它们在文档中的显示顺序相同.

  • 向应用程序报告解析器在发生时遇到的令牌的性质.

  • 应用程序提供必须注册的"事件"处理程序解析器.

  • 在标识标记时,将使用相关信息调用处理程序中的回调方法.

何时使用?

你应该使用SAX解析器当&减去;

  • 您可以从上到下以线性方式处理XML文档.

  • 文档没有深度嵌套.

  • 您正在处理一个非常大的XML文档,其DOM树会消耗太多内存.典型的DOM实现使用10个字节的内存来表示XML的一个字节.

  • 要解决的问题只涉及XML文档的一部分.

  • 解析器看到数据后立即可用,因此SAX适用于通过流到达的XML文档.

SAX的缺点

  • 我们没有随机访问权限XML文档,因为它是以仅向前的方式处理的.

  • 如果您需要跟踪解析器已经看到的数据或更改顺序项目,您必须自己编写代码并存储数据.

ContentHandler接口

此接口指定SAX解析器用于向应用程序通知其已看到的XML文档组件的回调方法.

  • void startDocument() : 在文档的开头调用.

  • void endDocument() : 在文档的末尾调用.

  • void startElement(String uri,String localName,String qName,Attributes atts) : 在元素的开头调用.

  • void endElement(String uri,String localName,String qName) : 在元素的末尾调用.

  • void characters(char [] ch,int start,int length) : 遇到字符数据时调用.

  • void ignorableWhitespace(char [] ch,int start,int length) : 当存在DTD并且遇到可忽略的空格时调用.

  • void processingInstruction(String target,String data) : 在识别处理指令时调用.

  • void setDocumentLocator(Locator locator)) : 提供可用于识别文档中位置的定位器.

  • void skippedEntity(String name) : 遇到未解析的实体时调用.

  • void startPrefixMapping(String prefix,String uri) : 在定义新的命名空间映射时调用.

  • void endPrefixMapping(String prefix) : 在命名空间定义结束其范围时调用.

属性接口

此接口指定方法处理连接到元素的属性.

  • int getLength() : 返回属性数.

  • String getQName(int index)

  • String getValue(int index)

  • String getValue(String qname)