Xerces SAX Parser(Xerces SAX Parser)

优质
小牛编辑
133浏览
2023-12-01

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)) - 提供可用于标识文档中位置的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)