Java中的 StAX 与 SAX 解析器
流式处理 XML 的 API,称为 StAX,是一种用于读取和写入 XML 文档的 API。它是在Java 6 中引入的,被认为优于 SAX 和 DOM,后者是Java中访问 XML 的其他方法。 Java提供了几种访问 XML 的方法 [API]。传统上,XML API 要么——
- 基于树的[例如StAX,DOM]:整个文档作为树结构被读入内存,以供调用应用程序随机访问
- 基于事件的 [例如 SAX]:应用程序注册以接收事件,因为在源文档中遇到这些实体
StAX 是这两个对立面之间的中位数。创建 StAX 是为了解决两个最流行的解析 API(第一个 SAX 和第二个 DOM)中的限制。在 StAX 中,程序入口点是一个光标,即表示文档中的一个点。应用程序将光标向前移动,以便根据需要从解析器中提取信息。这与将数据推送到应用程序的基于事件的 API(如 SAX)非常不同。因此,这需要应用程序根据需要维护事件之间的状态,以跟踪文档中的位置
StAX 可以进行 XML 读取和写入,而 SAX 只能进行 XML 读取。 StAX 是 XML 的 Pull-Parsing 模型,它避免了大多数陷阱。应用程序可以通过从解析器中提取事件来控制解析 XML 文档。与 SAX StAX 1 一样,它是一个独立于解析器的纯Java API,它基于可由多个解析器实现的接口。 StAX API 的主要主要目标是通过公开一个简单的基于迭代器的 API 将解析控制权交给程序员。这允许程序员请求下一个事件,即[拉事件]并允许以程序方式存储状态
萨克斯
SAX 是一个推送 APL。 SAX 解析器遍历 XML 并调用开发人员提供的处理程序对象上的方法。当 SAX 解析器遇到 XML 元素的开头时,它会在处理程序对象上调用 start Element。它将信息从 XML 推送到开发者的对象中,因此得名 push API
SAX 也称为事件驱动 API。这是因为当在 XML 文档中找到元素、文本、注释等时,将通过事件调用通知处理程序对象 DOM 允许对文档进行随机访问,而 SAX 需要较小的内存占用并且通常要快得多。这两种方式都是相反的。基于树的 API 允许无限制的随机访问和操作,而基于事件的 API 是一次性通过源文档。
差异表
下表描述了可用 XML Parsing API 之间的功能差异: Features StAX SAXAPI Type API Type is Pull, streaming API Type is Push, streaming Ease of Use StAX have Usability High SAX Have Usability Medium XPath Capability StAX has No XPath Capability SAX has No XPath Capability CPU and Memory Efficiency CPU and Memory Efficiency is Good CPU and Memory Efficiency is Good Forward Only The Forward Only Feature is Present The Forward Only Feature is Present Read XML The Feature of Reading XML is Present The Feature of Reading XML is Present Write XML The Feature of Writing XML is Present The Feature of Writing XML is Not Present Create, Read, Update, Delete The Command Features like Create, Read, Update, Delete are Not Present The Command Features like Create, Read, Update, Delete are Not Present