我需要阅读较小的(最多几个MB,UTF-8编码的)XML文件,浏览各种元素和属性,或许修改一些并将XML再次写回磁盘(最好是很好的,缩进格式)。
根据我的需求,最好的XML解析器是什么?有很多可供选择。我知道的有些是:
当然是JDK中的那个(我使用的是Java 6)。我对Xerces很熟悉,但发现它很笨重。
建议?
答案 0 :(得分:250)
我认为你不应该考虑任何特定的解析器实现。 Java API for XML Processing允许您以标准方式使用任何符合标准的解析器实现。代码应该更加可移植,并且当您意识到特定解析器已经变得太旧时,您可以在不更改代码行的情况下将其替换为另一行(如果您正确执行)。
基本上有三种以标准方式处理XML的方法:
忘记专有API,例如JDOM或Apache专用API(即Apache Xerces XMLSerializer)因为会将您绑定到可能及时发展或失去向后兼容性的特定实现,这将使您在将来更改代码时您想要升级到新版本的JDOM或您使用的任何解析器。如果您坚持使用Java标准API(使用工厂和接口),您的代码将更加模块化和可维护。
没有必要说所有(我没有检查所有,但我几乎可以肯定)解析器建议符合JAXP实现,所以从技术上讲,你可以使用all,无论哪个。
答案 1 :(得分:127)
这是一个关于DOM,SAX,StAX& amp;的完美比较。 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 否否是否
答案 2 :(得分:80)
如果速度和内存没问题, dom4j 是一个非常好的选择。如果您需要速度,使用像 Woodstox 这样的StAX解析器是正确的方法,但是您必须编写更多代码来完成工作,并且您必须习惯于在流中处理XML。
答案 3 :(得分:8)
简单XML http://simple.sourceforge.net/非常容易(反)序列化对象。
答案 4 :(得分:4)
除了SAX和DOM之外,还有使用XMLStreamReader的STaX解析,这是一个xml pull解析器。
答案 5 :(得分:3)
我发现dom4j是使用XML的工具。特别是与Xerces相比。
答案 6 :(得分:2)
我不建议你在应用程序中有很多“思考”,但使用XSLT可能比Java操作更好(并且可能更快地使用XSLT到字节码编译)。
答案 7 :(得分:1)
如果你不太关心性能,我是Apache Digester的忠实粉丝,因为它本质上允许你直接从XML映射到Java Bean。
否则,您必须首先解析,然后构造您的对象。