我遇到了两种不同的代码来解析文件StAX
。快速谷歌搜索告诉我有 2 种解析方法:使用游标 API和使用迭代器 API。请告诉我两者之间的区别以及从开发人员的角度来看哪一个更容易使用。
2 回答
您最有可能在 Java Web Services Developer Pack 教程或Java EE 5 教程中的 StAX API 部分找到答案。它们都包含我在下面复制的相同信息:
比较游标和迭代器 API
在游标和迭代器 API 之间进行选择之前,您应该注意一些可以用迭代器 API 做的事情,而不能用游标 API 做的事情:
从 XMLEvent 子类创建的对象是不可变的,可以在数组、列表和映射中使用,并且即使在解析器转移到后续事件之后也可以通过您的应用程序传递。
您可以创建 XMLEvent 的子类型,它们可以是全新的信息项,也可以是现有项的扩展,但具有附加方法。
您可以使用比游标 API 更简单的方式在 XML 事件流中添加和删除事件。
同样,在做出选择时,请记住一些一般性建议:
如果您正在为内存特别受限的环境(如 J2ME)进行编程,则可以使用游标 API 编写更小、更高效的代码。
如果性能是您的最高优先级——例如,在创建低级库或基础架构时——游标 API 会更高效。
如果要创建 XML 处理管道,请使用迭代器 API。
如果要修改事件流,请使用迭代器 API。
如果您希望您的应用程序能够处理事件流的可插入处理,请使用迭代器 API。
一般来说,如果您对某一种方式没有强烈的偏好,建议使用迭代器 API,因为它更灵活和可扩展,从而“面向未来”您的应用程序。
尽管推荐使用迭代器 API,但它比游标 API 慢,因为游标不需要记住它之前解析过的节点;它提供 XML 文档的只进解析并且没有XMLEvent
对象构造的开销。显然,一项基准测试表明,与 StAX 相比,SAX 在解析大型文档方面可能会更好。您可能想验证是否可以为您的数据集重现基准测试的结果。
如果你不解析长的 XML 文件,那么你可以简单地使用 JDOM,JDOM 将整个 XML 加载到内存中并且速度较慢,但它非常易于使用。