📜  SAX Parser-概述

📅  最后修改于: 2020-11-10 04:37:25             🧑  作者: Mango


SAX(XML的简单API)是xml文档的基于事件的解析器。与DOM解析器不同,SAX解析器不创建任何解析树。 SAX是XML的流接口,这意味着使用SAX的应用程序会接收到有关正在处理的XML文档的事件通知-元素和属性,并依次从文档顶部开始,以结尾处结束。 ROOT元素。

  • 从上至下读取XML文档,识别构成格式正确的XML文档的标记。

  • 令牌的处理顺序与文档中出现的顺序相同。

  • 报告应用程序,解析器在出现令牌时遇到的令牌的性质。

  • 应用程序提供了一个“事件”处理程序,该处理程序必须在解析器中注册。

  • 标识令牌后,将使用相关信息来调用处理程序中的回调方法。

什么时候使用?

您应该在以下情况下使用SAX解析器:

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

  • 该文档不是深层嵌套。

  • 您正在处理一个非常大的XML文档,该文档的DOM树将占用大量内存。典型的DOM实现使用十个字节的内存来表示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) -在元素末尾调用。

  • 无效字符(char [] ch,int开头,int长度) -遇到字符数据时调用。

  • void ignorableWhitespace(char [] ch,int start,int length) -存在DTD且遇到可忽略的空白时调用。

  • void processingInstruction(String target,String data) -识别到处理指令时调用。

  • setDocumentLocator(Locator locator)) -提供一个可以用来识别文档中位置的Locator。

  • void skippedEntity(String name) -遇到未解决的实体时调用。

  • void startPrefixMapping(String prefix,String uri) -定义新的名称空间映射时调用。

  • void endPrefixMapping(String prefix) -当名称空间定义结束其作用域时调用。

属性界面

该接口指定用于处理连接到元素的属性的方法。

  • int getLength() -返回属性的数量。

  • 字符串getQName(int index)

  • 字符串getValue(int索引)

  • 字符串getValue(字符串qname)