XML 拉取解析器和 SAX 解析器有什么区别

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


答案 1

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

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

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


答案 2

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

SAX 解析器 -->处理程序

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

Handler 类调用解析器或当处理程序类控制解析器何时移动下一个事件时,称为拉取分析器。此处,处理程序将 XML 事件从分析器中“拉出”。例如。断续器

处理程序 --> StAX 解析器

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