我需要读取较小的XML文件(最多只有几MB, UTF-8编码),查找各种元素和属性,可能修改一些,并将XML再次写回磁盘(最好采用漂亮的缩进格式)。
最适合我的XML解析器是什么?有很多选择。我知道的有:
杰登 伍兹托克斯 XOM Dom4j VTD-XML 薛塞斯-J 深 红色
当然还有JDK中的那个(我用的是Java 6)。我熟悉Xerces,但觉得它很笨拙。
建议吗?
我需要读取较小的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。