XMLReader是SAX解析器,DOM解析器还是两者都不是?

我正在测试各种方法来读取PHP中的XML配置文件(可能很大,读取频率很高)。 不需要写作。 我有两个成功的实现,一个使用SimpleXML (我知道它是一个DOM解析器),一个使用XMLReader

我知道DOM阅读器必须阅读整个树,因此需要更多的内存。 我的测试反映了。 我也知道SAX解析器是一个“基于事件”的解析器,它使用更少的内存,因为它从流中读取每个节点而不检查下一步是什么。

XMLReader也可以使用游标读取数据流,并提供有关当前所在节点的数据。 所以,它听起来像XMLReader(http://us2.php.net/xmlreader)不是一个DOM解析器,但我的问题是,它是一个SAX解析器,或其他? 看起来XMLReader的行为与SAX解析器一样,但不会自己抛出事件(换句话说,您可以使用XMLReader构造一个SAX解析器吗?)

如果是别的,它的分类是否有名字?


XMLReader称自己为“拉解析器”。

XMLReader扩展是一个XML Pull解析器。 阅读器充当向文档流前进的光标,并停在路上的每个节点上。

它后来继续说它使用libxml。

关于Java XML Pull Parsing的这个页面可能会有一些可能的兴趣。 如果XMLReader与这个项目的目标和意图有关,那么你的问题的答案完全落入“不是”类别。


SAX解析器是实现SAX API的解析器。 即:当且仅当您可以使用SAX API对其进行编码时,给定的解析器才是SAX解析器。 对于DOM解析器也是如此:这种分类完全是关于它支持的API,而不是API如何实现。 因此,一个SAX解析器也可能是一个DOM解析器; 因此你不能确定如何使用更少的内存或其他特性。

然而,要解决真正的问题:XMLReader似乎是更好的选择,因为它是一个拉解析器,您可以非常明确地请求所需的数据,因此应该减少开销。


XMLReader是SAX2解析器必须实现的接口。 因此,当你通过XMLReader访问它时,你可以说你有一个SAX解析器,简而言之, XMLReader是SAX解析器。

查看XMLReader的javadoc。

XMLReader是XML解析器的SAX2驱动程序必须实现的接口。 该接口允许应用程序设置和查询解析器中的特性和属性,注册用于文档处理的事件处理程序,并启动文档解析。

我认为这些信息是相关的,因为:

  • 它来自SAX官方网站
  • 即使javadoc用于Java,SAX也源于Java语言。
  • 链接地址: http://www.djcxy.com/p/64743.html

    上一篇: Is XMLReader a SAX parser, a DOM parser, or neither?

    下一篇: Deleting nodes from large XML files