我需要阅读较小的(最多几个MB,UTF-8编码的)XML文件,浏览各种元素和属性,或许修改一些并将XML再次写回磁盘(最好使用漂亮的缩进格式) .
什么是最符合我需求的XML解析器?有很多可供选择.我知道的有些是:
当然是JDK中的那个(我使用的是Java 6).我对Xerces很熟悉,但发现它很笨重.
建议?
流式xml解析器(如SAX和StAX)比构建像DOM解析器这样的树结构的解析器更快,内存效率更高.SAX是一个推送解析器,意味着它是观察者模式的一个实例(也称为监听器模式).SAX首先存在,但随后出现了StAX - 一个拉解析器,意味着它基本上像迭代器一样工作.
你可以找到为什么在任何地方都喜欢StAX而不是SAX的原因,但它通常归结为:"它更容易使用".
在关于JAXP的Java教程中,StAX被模糊地呈现为DOM和SAX之间的中间:"它比SAX更容易,并且比DOM更高效".但是,我从来没有发现任何线索,StAX比SAX更慢或内存效率更低.
这一切让我想知道:有没有理由选择SAX而不是StAX?