我需要阅读较小的(最多几个MB,UTF-8编码的)XML文件,浏览各种元素和属性,或许修改一些并将XML再次写回磁盘(最好使用漂亮的缩进格式) .
什么是最符合我需求的XML解析器?有很多可供选择.我知道的有些是:
JDOM
Woodstox
XOM
DOM4J
VTD-XML
的Xerces-J
赤红
当然是JDK中的那个(我使用的是Java 6).我对Xerces很熟悉,但发现它很笨重.
建议?
我认为你不应该考虑任何特定的解析器实现.Java API for XML Processing允许您以标准方式使用任何符合标准的解析器实现.代码应该更加可移植,并且当您意识到特定解析器已经变得太旧时,您可以在不更改代码行的情况下将其替换为另一行(如果您正确执行).
基本上有三种以标准方式处理XML的方法:
SAX这是最简单的API.您通过定义Handler类来读取XML,该类在以串行方式处理XML时接收元素/属性内的数据.如果您只打算读取一些属性/元素和/或写回一些值(您的情况),它会更快更简单.
DOM此方法创建一个对象树,允许您随机修改/访问它,以便更好地进行复杂的XML操作和处理.
StAX这是SAX和DOM之间的路径中间.您只需编写代码即可在处理数据时从您感兴趣的解析器中提取数据.
忘记专有API,例如JDOM或Apache专用API(即Apache Xerces XMLSerializer),因为它会将您绑定到可能及时发展或失去向后兼容性的特定实现,这将使您在将来要升级时更改代码新版本的JDOM或您使用的任何解析器.如果您坚持使用Java标准API(使用工厂和接口),您的代码将更加模块化和可维护.
没有必要说所有(我没有检查所有,但我几乎可以肯定)解析器建议符合JAXP实现,所以从技术上讲,你可以使用所有,无论哪个.
这是关于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类型 拉,流式推送,流式传输在内存树XSLT规则中
易于使用 高中高中等
XPath能力 否否是是
CPU和内存 良好的变化变化
仅转发 是是否否
读取XML 是是是是
写XML 是否是是
CRUD 否否是否
如果速度和内存没问题,dom4j是一个非常好的选择.如果你需要速度,使用像Woodstox这样的StAX解析器是正确的方法,但你必须编写更多的代码来完成工作,你必须习惯于在流中处理XML.
简单的XML http://simple.sourceforge.net/非常容易(反)序列化对象.