我需要阅读较小的(最多几个MB,UTF-8编码)XML文件,四处寻找各种元素和属性,也许要修改一些并将XML重新写回磁盘(最好采用缩进格式) 。
什么是满足我需求的最佳XML解析器?有很多可供选择。我知道的一些是:
当然是JDK中的那个(我正在使用Java 6)。我对Xerces很熟悉,但是觉得笨拙。
建议?
我需要阅读较小的(最多几个MB,UTF-8编码)XML文件,四处寻找各种元素和属性,也许要修改一些并将XML重新写回磁盘(最好采用缩进格式) 。
什么是满足我需求的最佳XML解析器?有很多可供选择。我知道的一些是:
当然是JDK中的那个(我正在使用Java 6)。我对Xerces很熟悉,但是觉得笨拙。
建议?
Answers:
如果速度和内存没问题,dom4j是一个很好的选择。如果需要提高速度,那么使用像Woodstox这样的StAX解析器是正确的方法,但是您必须编写更多代码来完成工作,并且必须习惯于在流中处理XML。
我认为您不应该考虑任何特定的解析器实现。用于XML处理的Java API使您能够以标准方式使用任何符合条件的解析器实现。该代码应该具有更大的可移植性,并且当您意识到某个特定的解析器太旧时,可以在不更改代码行的情况下(如果正确执行)将其替换为另一个。
基本上,有三种以标准方式处理XML的方式:
忘记专有的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 否否是否
简单的XML http://simple.sourceforge.net/非常容易(反序列化)对象。
除了SAX和DOM之外,还可以使用XMLStreamReader进行STaX解析,XMLStreamReader是xml pull解析器。
我不建议您这样做,因为您的应用程序中有很多“想法”,但是使用XSLT可能比Java操作更好(并且在XSLT到字节码的编译中可能更快)。