这些Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的概要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发布说明。
当您想要将现有数据转换为XML时,了解SAX事件模型会很有帮助。转换过程的关键是修改现有应用程序,在读取数据时传递SAX事件。
SAX快速高效,但其事件模型使其最适用于无状态的过滤。例如,SAX解析器在遇到元素标签时调用应用程序中的一个方法,在找到文本时调用不同的方法。如果您要处理的内容是无状态的(即不依赖于之前的元素),那么SAX就可以很好地工作。
另一方面,对于依赖状态的处理,即程序需要对元素A下的数据做一件事,但对元素B下的数据做另一件事,那么诸如XML流式API(StAX)之类的拉式解析器将是更好的选择。使用拉式解析器,您可以在代码中的任何位置随时获取下一个节点,无论它是什么。因此,可以轻松地对文本进行不同的处理(例如),因为可以在程序中的多个位置进行处理(有关详细信息,请参阅更多信息)。
SAX所需的内存比DOM少得多,因为SAX不会构建XML数据的内部表示(树结构),而DOM会。相反,SAX仅在读取时将数据发送给应用程序;然后您的应用程序可以根据其所见的数据执行任何操作。
拉式解析器和SAX API都像串行I/O流。您在数据流入时看到数据,但无法返回到较早的位置或跳到其他位置。通常,这种解析器在您只想要读取数据并让应用程序对其进行操作时效果很好。
但是,当您需要修改XML结构 - 特别是当您需要以交互方式修改它时 - 内存中的结构更合理。DOM就是这样的模型之一。然而,尽管DOM为大规模文档(如书籍和文章)提供了许多强大功能,但也需要大量复杂的编码。有关该过程的详细信息,请参阅下一课中的何时使用DOM。
对于较简单的应用程序,这种复杂性可能是不必要的。对于更快速的开发和更简单的应用程序,可以选择一种面向对象的XML编程标准,例如JDOM(http://www.jdom.org)和DOM4J(http://www.dom4j.org/)。