我需要读取较小的XML文件(最多只有几MB, UTF-8编码),查找各种元素和属性,可能修改一些,并将XML再次写回磁盘(最好采用漂亮的缩进格式)。

最适合我的XML解析器是什么?有很多选择。我知道的有:

杰登 伍兹托克斯 XOM Dom4j VTD-XML 薛塞斯-J 深 红色

当然还有JDK中的那个(我用的是Java 6)。我熟悉Xerces,但觉得它很笨拙。

建议吗?


当前回答

除了SAX和DOM之外,还可以使用XMLStreamReader进行STaX解析,XMLStreamReader是一个xml拉式解析器。

其他回答

我不建议这样做,因为您在应用程序中已经进行了大量的“思考”,但是使用XSLT可能比Java操作更好(从XSLT到字节码的编译可能更快)。

如果您不太关心性能,那么我是Apache Digester的忠实粉丝,因为它实际上允许您直接从XML映射到Java bean。

否则,您必须首先解析,然后构造对象。

下面是DOM, SAX, StAX和TrAX的比较 (来源:http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html)

功能                  StAX                  SAX                      DOM                  TrAX

API类型Pull,streaming Push,streaming在内存树中XSLT规则

易用性           高                    媒介                 高                    媒介

XPath功能没有                        没有                         是的                       是的

CPU和内存好                  好                    不同                  不同

提出只有是的                    是的                        没有                       没有

读取XML              是的                    是的                        是的                     是的

编写XML              是的                    没有                          是的                     是的

CRUD                      没有                      没有                         是的                     没有

除了SAX和DOM之外,还可以使用XMLStreamReader进行STaX解析,XMLStreamReader是一个xml拉式解析器。

如果速度和内存没有问题,dom4j是一个非常好的选择。如果需要速度,使用Woodstox这样的StAX解析器是正确的方法,但是必须编写更多的代码才能完成工作,并且必须习惯于处理流中的XML。