SAX

Simple API for XML（简称SAX）是个循序存取XML的解析器API。SAX提供一个机制从XML文件读取资料。它是除了文档对象模型（DOM）的另外一种流行选择。

定义

不像DOM，对于SAX并没有“正式的”规格。Java对于SAX的实现被认为是一种规范，在其他语言的实现尝试遵循着该实现的程序，必要时根据语言差异而调整。

优点

SAX解析器在某些方面优于DOM风格解析器。SAX解析器的内存使用量一般远低于DOM解析器使用量。DOM解析器在任何处理开始之前，必须把整棵树放在内存，所以DOM解析器的内存使用量完全根据输入资料的大小。相对来说，SAX解析器的内存内容，是只基于XML档案的最大深度（XML树的最大深度）和单一XML项目上XML属性储存的最大资料。这两个总是比整颗解析树本身还小。
因为SAX事件驱动的本质，处理文件通常会比DOM风格的解析器快。内存存取耗时，所以DOM较大的内存使用也是一个效能议题。
因为SAX的本质，从磁盘串流读取是可行的。无法放入内存的XML文件只可能使用SAX解析器（或另外的串流XML解析器）来处理。

缺点

SAX事件驱动的模型对于XML解析很有用，但它确实有某些缺点。
某些种类的XML验证需要存取整份文件。例如，一个DTD IDREF属性需要文件内有项目使用指定字串当成DTD ID属性。要在SAX解析器内验证，必须追踪每个之前遇过的ID和IDREF属性，检查是否有任何相符。更甚者，一个IDREF找不到对应的ID，使用者只会在整份文件都解析完后才发现，若这种连结对于建立有效输出是重要的，那用在处理整份文件的时间只是浪费。
另外，某些XML处理仅要求存取整份文件。举例来说，XSLT及XPath需要能够任何时间存取任何解析过的XML树。当SAX以用来建构此树时，DOM解析器在设计上已经是如此了。