DOM与Java中的SAX解析器

DOM与SAX Parser之间的区别是非常 popular 的Java采访问题,在Java和XML采访中经常被问到。DOM和SAX解析器都广泛用于在Java应用程序中读取和解析XML文件,它们都有各自的优缺点。在这篇文章中,我列出了两个解析器之间的一些明显的差异。

1。 Java中的DOM XML解析器

DOM解析器是基于树的API。基于树的API以树结构为中心,因此在树的组件(是DOM文档)上提供接口,例如Document接口,Node接口,NodeList接口,Element接口,Attr接口等。

DOM解析器根据输入文档在内存中创建树结构,然后等待来自客户端的请求。DOM解析器始终为客户端应用程序提供整个文档,无论客户端实际需要多少文档。使用DOM解析器,客户端应用程序中的方法调用必须是显式的,并形成一种链式方法调用。

2。 Java中的SAX XML解析器

SAX解析器是基于事件的API。通常,基于事件的API在处理程序上提供接口。有四个处理程序接口,ContentHandler接口,DTDHandler接口,EntityResolver接口和ErrorHandler接口。

SAX解析器不创建任何内部结构。取而代之的是,它将输入文档中组件的出现视为事件,并告诉客户端在读取输入文档时所读取的内容。SAX解析器在任何给定时间始终始终仅将文档的一部分提供给客户端应用程序。使用SAX解析器,当在xml文档上进行解析时发生某些特定事件时,某些自定义方法称为[“ 回调 ”方法]。尽管我们可以显式调用它们,但客户端不必显式调用这些方法。

3。 DOM和Java中的SAX XML Parser之间的区别

让我们列出一个容易记住的差异简短列表。

DOM(文档对象模型)

  • 解析整个文档
  • 将结果表示为树
  • 让您搜索树
  • 让您修改树
  • 适合读取数据/配置文件

萨克斯

  • 解析直到您告诉它停止
  • 为每个事件触发事件处理程序:
    1. 开始标签
    2. 标签体
    3. 结束标签
  • 低级API
  • 适用于非常大的文档,特别是如果您只关心文档的一小部分。

4.如何在DOM和SAX解析器之间进行选择?

理想情况下,一个好的解析器应该是快速的(省时的),节省空间的,功能丰富的并且易于使用的。但是实际上,没有一个主要的解析器同时具有所有这些功能。例如,DOM解析器功能丰富(因为它在内存中创建了DOM树,并允许您重复访问文档的任何部分,并允许您修改DOM树),但是当文档很大时,空间效率低下,并且需要花费一些时间来学习如何使用它。

但是,在输入文档较大的情况下,SAX Parser的空间效率要高得多(因为它不创建内部结构)。而且,由于它的API非常简单,因此它比DOM Parser运行起来更快,更易于学习。但是从功能的角度来看,它提供的功能较少,这意味着用户自己必须承担更多的责任,例如创建自己的数据结构。

我认为答案确实取决于您的应用程序的特性和您当前的要求

5.可以同时使用SAX和DOM解析器吗?

是的,当然,因为使用DOM解析器和SAX解析器是独立的。例如,如果您的应用程序需要处理两个XML文档,并且对每个文档执行不同的操作,则可以对一个文档使用DOM解析器,对另一个文档使用SAX解析器,然后合并结果或使处理与每个文档配合其他。

This entry was posted in   Xml.
Bookmark the   permalink.

saigon has written 1445 articles

Leave a Reply