我正在使用Apache Tomcat开发RSS feed聚合器。我想知道使用哪个解析器来读取RSS源。我应该使用DOM,SAX还是StAX?我知道有一些特定的库可以用java阅读RSS源,但由于这是一个大学项目,我不应该使用它们。谢谢。
这主要取决于您的需求。每个都有自己的功能。
DOM - 将整个内容拉入内存并在内部走动。适用于您希望使用的复杂内容的相对较小的XML块。 XSLT使用DOM。
SAX - 当XML到达时观察它们飞过的东西。适用于大量数据或相对简单的处理。
StAX - 很像SAX,但不是响应流中发现的事件而是迭代xml - 请参阅When should I choose SAX over StAX?以讨论哪个是最好的。
这里有一个很好的讨论Parsing XML using DOM, SAX and StAX Parser in Java - 由Mohamed Sanaulla。注意:他的SAX解析器有一个错误 - 他应该追加字符,而不是替换它们,因为字符数据是累积的并且可能以块的形式到达。
content = String.copyValueOf(ch, start, length);
应该
content += String.copyValueOf(ch, start, length);
也是Kaan Yamanyar Differences between DOM, SAX or StAX的博客文章。
我不知道StAX,但我可以对DOM和SAX说些什么:
Dom将XML-Data作为对象模型保存在内存中。优点是,您可以在内存中以方便快捷的方式访问和更改数据。缺点是,这具有高内存消耗。
SAX使用某种事件模式来读取数据,并且不会将任何数据保存在内存中。优点是,这是相对快速的,并不需要太多的记忆。缺点是,如果要以方便的方式更改数据,则必须创建自己的数据模型。
与SAX相比,Dom使用起来有点复杂。
如果需要将大数据解析为Stream,请使用SAX。如果要将完整数据保存在内存中以使用DOM并且数据大小足够小以安全地适合内存,请使用DOM。
例如:XSLT不能与SAX一起使用,因为它需要在读取数据流时向前看。因此它使用DOM,即使这会导致大数据的内存问题。
希望有所帮助:-)