并不总是需要使用解析器提取信息
尽管有些意想不到,但您并一定需要使用一种功能完善的 XML 解析器,使用 SAX、DOM 或其他技术(如 XPath 或 XQuery)从 XML 文件中提取需要的信息。
XML 文件使用结构化的格式包含数据,但是有时您需要信息使用自身的结构化格式。要快速查找一个信息片段时,通常可以使用更简单的解决方法。
通常,您仅需使用 grep、Perl 或其他类似工具提取所需的数据,而不需要以 XML 文件的形式实际解释文档的结构或内容。
例如,您可以使用 grep 选择电话号码(参见清单 10)。

清单 10. 使用 grep 选择电话号码
                
$ grep '123 456 7890
123 456 7890
123 456 7890
234 567 8901
234 567 8901

您使用 grep 选择了需要的信息,并且不需要考虑信息是 XML 格式或者信息的结构。
如果需要查找简短的信息片段,简化的处理技术可以查找到所需的信息,并且避免了使用传统解析方法的开销。




回页首


何时使用 SAX 而非 DOM 解析
当为文档构建一个解析器以获得所需信息时,常常很难决定何时使用基于 SAX 的处理程序,何时使用基于 DOM 的处理程序。
关于这个问题的最简单解决方法是同时考虑文档的复杂性和所查找信息的用途。如果要转换文档,或者文档非常大,那么 SAX 是最佳选择。
SAX 逐个解析文档元素,在识别元素时调用方法或函数。如果将一个 XML 文档转换为另一种格式,例如将 XML 转换成 HTML,那么 SAX 是最有效的方式。您不必将整个文档加入到内存中,只需响应被识别出的元素和结构。
SAX 的缺点是,如果需要保存或记录结构,或者理解整个文档并从其中挑选单个元素(例如,从所有记录中选择单个联系人),则必须构建复杂的处理程序,以加载数据并将数据记录到结构中,然后将元素标识到输出目标中。




回页首


何时使用 DOM 而非 SAX 解析
DOM 可以将整个文档及其结构载入到内存,并允许您在应用程序内部引用和使用 XML 文档的结构。如在联系人示例中,您可以将整个联系人数据库读入内存,然后通过遍历联系人选择所有的电话号码,接着在每个联系人内部遍历每个电话号码。
由于 DOM 保留了结构,更重要的是可以理解和处理结构,您可以轻松地对结构进行整体或单独的处理。仍然以联系人示例为例,使用 SAX 插入新的联系人将非常复杂。但是如果使用 DOM,您只需将一个表示新联系人的新 XML 元素插入到现有的 XML 文档。
DOM 的缺陷是使用流方式处理文件 — 例如,转换为 HTML — 过于复杂,因为必须在结构内逐个遍历每个元素来处理文档。
此外,由于 DOM 在解析其间将整个 XML 文档载入到内存中,DOM 解析器会变得非常慢并且需要更多的内存。但 DOM 处理这样做也有一些好处;例如,在一次解析过程中,可以对使用 DOM 解析的 XML 文档进行多次处理。而使用 SAX,则需要多次重复解析过程才能获得相同的效果。
访问  参考资料,查找更多关于使用 DOM 和 SAX 的信息。