我需要读取较小的XML文件(最多只有几MB, UTF-8编码),查找各种元素和属性,可能修改一些,并将XML再次写回磁盘(最好采用漂亮的缩进格式)。
最适合我的XML解析器是什么?有很多选择。我知道的有:
当然还有JDK中的那个(我用的是Java 6)。我熟悉Xerces,但觉得它很笨拙。
建议吗?
我发现dom4j是处理XML的工具。尤其是和薛西斯相比。
我认为您不应该考虑任何特定的解析器实现。用于XML处理的Java API允许你以标准的方式使用任何符合语法分析器的实现。代码应该具有更强的可移植性,并且当您意识到某个特定的解析器已经太旧时,可以用另一个解析器替换它,而不需要更改任何一行代码(如果操作正确的话)。
基本上有三种标准处理XML的方法:
忘记专有api,如JDOM或Apache的api(即Apache Xerces XMLSerializer),因为它将把你绑定到一个特定的实现,这个实现可能会随着时间的推移而演变或失去向后兼容性,这将使你在未来想要升级到一个新版本的JDOM或任何你使用的解析器时更改你的代码。如果你坚持使用Java标准API(使用工厂和接口),你的代码将更加模块化和可维护性。
没有必要说所有的解析器(我还没有检查所有的解析器,但我几乎可以肯定)都符合JAXP实现,所以从技术上讲,您可以使用所有的解析器,无论哪种解析器。
如果速度和内存没有问题,dom4j是一个非常好的选择。如果你需要速度,使用像Woodstox这样的StAX解析器是正确的方法,但你必须编写更多的代码来完成工作,你必须习惯于处理流中的XML。
除了SAX和DOM之外,还可以使用XMLStreamReader进行STaX解析,XMLStreamReader是一个xml拉式解析器。
如果您不太关心性能,那么我是Apache Digester的忠实粉丝,因为它实际上允许您直接从XML映射到Java bean。
否则,您必须首先解析,然后构造对象。
我不建议这样做,因为您在应用程序中已经进行了大量的“思考”,但是使用XSLT可能比Java操作更好(从XSLT到字节码的编译可能更快)。
功能,,,,,,,,,,,,,,,,StAX,,,,,,,,,,,,,,,,SAX,,,,,,,,,,,,,,,,,,,,DOM,,,,,,,,,,,,,,,,TrAX
API类型 ,,,,,,,,,,,,,,拉,流媒体,,,在内存树中  
易用性 ,,,,,,,,高,,,,,,,,,,,,,,,,,,中,,,,,,,,,,,,,,,高,,,,,,,,,,,,,,,,,,媒介
XPath功能 ,No ,,,,,,,,,,,,,,,,,,,没有,,,,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,是的
CPU和;内存,,,好的,,,,,,,,,,,,,,,,好的,,,,,,,,,,,,,,,,,,不同,,,,,,,,,,,,,,,,不同
只有向前,,,,,,是的,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,,,,没有,,,,,,,,,,,,,,,,,,,,,没有
读取XML,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,是的
编写XML,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,没有,,,,,,,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,是的
CRUD,,,,,,,,,,,,,,,,,,,,没有,,,,,,,,,,,,,,,,,,,,没有,,,,,,,,,,,,,,,,,,,,,,,是的,,,,,,,,,,,,,,,,,,,没有
Simple XML http://simple.sourceforge.net/非常容易(反)序列化对象。