Java:解析XML文件:DOM,SAX还是StAX?

我正在使用Apache Tomcat开发RSS feed聚合器。 我想知道使用哪个解析器来读取RSS源。 我应该使用DOM,SAX还是StAX? 我知道有一些特定的库可以用java阅读RSS源,但由于这是一个大学项目,我不应该使用它们。 谢谢。

这主要取决于您的需求。 每个都有自己的function。

DOM – 将整个内容拉入内存并在内部走动。 适用于您希望使用的复杂内容的相对较小的XML块。 XSLT使用DOM。

SAX – 当XML到达时观察它们飞过的东西。 适用于大量数据或相对简单的处理。

StAX – 很像SAX,但不是响应流中发现的事件而是迭代xml – 请参阅何时应该选择SAX而不是StAX? 讨论哪个是最好的。

这里有一个很好的讨论,在Java中使用DOM,SAX和StAX Parser解析XML – 作者:Mohamed Sanaulla。 注意:他的SAX解析器有一个错误 – 他应该追加字符,而不是替换它们,因为字符数据是累积的,并且可能以块的forms到达。

content = String.copyValueOf(ch, start, length); 

应该

  content += String.copyValueOf(ch, start, length); 

还有一篇由Kaan Yamanyar撰写的博客文章, DOM,SAX或StAX之间 存在 差异 。

我不知道StAX,但我可以对DOM和SAX说些什么:

Dom将XML-Data作为对象模型保存在内存中。 优点是,您可以在内存中以方便快捷的方式访问和更改数据。 缺点是,这具有高内存消耗。

SAX使用某种事件模式来读取数据,并且不会将任何数据保存在内存中。 优点是,这是相对快速的,并不需要太多的记忆。 缺点是,如果要以方便的方式更改数据,则必须创建自己的数据模型。

与SAX相比,Dom使用起来要复杂一些。

如果需要将大数据解析为Stream,请使用SAX。 如果要将完整数据保存在内存中以使用DOM并且数据大小足够小以安全地适合内存,请使用DOM。

例如:XSLT不能与SAX一起使用,因为它需要在读取数据流时向前看。 所以它使用DOM,即使这会导致大数据的内存问题。

希望有所帮助:-)