DOM,SAX和StAX XML解析器之间有什么区别? [关闭]

问题描述 投票:2回答:2

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

java xml dom sax stax
2个回答
19
投票

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

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的博客文章。


4
投票

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

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

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

与SAX相比,Dom使用起来有点复杂。

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

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

希望有所帮助:-)

© www.soinside.com 2019 - 2024. All rights reserved.