XML Pull Parser 和 SAX Parser 有啥区别

Posted

技术标签:

【中文标题】XML Pull Parser 和 SAX Parser 有啥区别【英文标题】:What is the difference between XML Pull Parser and SAX ParserXML Pull Parser 和 SAX Parser 有什么区别 【发布时间】:2014-12-26 09:36:29 【问题描述】:

我正在寻找 SAX 和 Pull Parser 之间的主要区别。我知道 SAX 解析器非常适合处理大型 XML 文件,因为它不存储 XML 并且仅在一个方向上遍历。与 DOM 相比。但我找不到 SAX 和 PULL 之间的主要区别。 请给我任何链接

【问题讨论】:

SAX 一个拉式解析器,但还有其他的,例如DOM。 SAX 是一个推式解析器 - StAX 是一个拉式解析器(参见下面的比较链接) 【参考方案1】:

不同之处在于您编写 XML 处理器的方式。对于 SAX 解析器,您使用事件驱动模型,您可以在其中提供一个类,该类具有响应读取 XML 时发生的事件的方法 (Oracle tutorial here)。

对于拉式解析器,您可以更好地控制何时读取 XML 的位,并且您可以将解析器句柄传递给各个类以处理文档的不同位 (Oracle tutorial here)。

Oracle 对这些技术的比较可以在here 找到。

【讨论】:

【参考方案2】:

Parser 调用您的处理程序时,即 Parser 将事件推送到您的处理程序中,它被称为 Parser 的推送模型,例如。 SAX 解析器

SAX 解析器 --> 处理程序

使用推送模型,您无法控制解析后的文件迭代方式和时间。

Handler类调用解析器或者当handler类控制解析器何时移动到下一个事件时称为Pull Parser。这里 Handler 从解析器中“拉”出 XML 事件。例如。斯塔克斯

处理程序 --> StAX 解析器

更多信息,请阅读http://tutorials.jenkov.com/java-xml/sax-vs-stax.html

【讨论】:

以上是关于XML Pull Parser 和 SAX Parser 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Android之解析XML格式数据

使用pull方式和sax方式对xml文件进行解析

Android 使用pull,sax解析xml

使用 SAX Parser 进行 Android XML 解析

使用 Sax Parser、Java 处理 XML 中的空标签

如何在 Java 中使用 SAX Parser 检查 xml 标签是不是具有属性?