工作中会遇到各种xml的读和写,在此总结一下各自的使用场景。
1,dom4j,最常用的xml读写工具。功能强大,jdom的升级版,复杂的xml读写的首选,但是一次加载,占内存。最喜欢的就是它的Xpath功能。
2,jdom,dom,解析xml时,一次性加载进内存,大文件容易OOM,缺点即优点,却方便修改,适用于文件不大,需要反复修改的xml文件,jdom2.0内部可选sax方式解析,也挺好用。
3,stax,sax 都不用一次性加载进内存,流式处理,边解析边处理
stax当xml 文档非常大,不可能将xml所有数据加载到内存 ,一边解析 ,一边处理,一边释放内存资源 ---- 不允许在内存中保留大规模xml 数据
stax JDK6.0引入的新特性,stax是一种 拉模式 XML 解析方式,stax是一种 推模式 XML 解析方式,
stax技术较sax新,较常用,
4,jaxb 将xml对象与xml对象相互映射,是不是很6,但是缺陷是DOM结构必须是静态的,不能是动态的,因为要提前写好映射的pojo类,在一次需求中就吃亏了,都快完成了,最后不能支持动态的xml,乖乖的换回DOM4j解析。
适用于dom结构固定简单的xml文件,不然pojo类映射会很复杂。
总结:首选DOM4j,功能最强大。但是会有杀鸡不用牛刀的情景
(1)DOM结构简单固定的可以用jaxb
(2)jdom2.0内部可以选用sax方式处理,用于解析文件不太大,需要反复修改的xml文件
(3)stax流式处理,处理逻辑不复杂时,首选。对内存资源要求较高时也可以用这个
个人最常使用:jaxb + dom4j + stax.
参考: