XML解析技术的特性比较与选择

根据上一篇文章中对四种XML解析技术的介绍和分析,对其特性进行总结和比较,如下表所示:

 

 

 

                     表1 XML解析技术特性比较

一. XML解析技术的选取

    这些解析技术具有各自的优缺点,在应用中,如何选择正确的解析技术,往往成为提高应用系统整体性能和效率的关键。

 

一) 面向文档与面向应用的解析方式的选取

适合面向应用(主要有JAXB)的场合:

如果应用程序只是将XML文档作为数据交换的媒介,关心文档中包含的数据胜于关心文档的XML结构,那么选择面向应用的解析方式将能够在数据获取上得到很大的简化,虽然在效率上有点损失,但相对于整个应用系统的模块化设计是值得的。

 

适合面向文档的场合:

如果应用程序真正关心文档结构的细节,如编写一个XML文档编辑器,又或应用程序正在处理的XML文档不遵守固定的结构,那么选择面向文档的解析方式不仅能够提高效率,还可以降低编程的复杂性。

 

二) 面向文档的解析方式的选取

面向文档的解析方式,包括流式解析(SAX,StAX),对象式解析(DOM,JDOM,DOM4J),指针式解析(VTD-XML

 

1)流式解析(SAX,StAX

如果应用程序仅仅想高效率的获得XML文档中的某部分数据,并且希望对解析过程进行更多的控制,而不需要对文档进行添加和修改,那么选取流式解析更能满足需求。在流式解析中,StAX技术使得应用程序能够更方便的控制解析过程,并且其作为Java的官方规范,得到了更广泛的应用。

2)对象式解析(DOM,JDOM,DOM4J

如果应用程序需要频繁的对XML文档中的数据进行检索和修改,而对内存和效率没有过多要求,那么对象式解析将是一种很好的选择。

 

原因:

对象式解析作为一种高级的解析方式,它的重点在于对文档结构进行建模,而完全不关心文档的解析过程(对象式解析往往建立在流式解析的基础上,在流式解析的过程中逐步建立模型)。而一旦在内存中建立了文档的树形结构模型,那么就可以方便的通过模型对文档进行搜索,修改、添加和删除等操作,并且更适合于面向对象的编程。然而,这种便利性是以内存和效率为代价的。

3)指针式解析(VTD-XML

当应用程序不关心解析过程,而对性能有较高要求时,可以选择使用指针式解析。

 

原因:

指针式解析的提出是以提高效率,减少内存消耗为主要目的,可看作是介于流式解析和对象式解析之间的一种解析方式。它巧妙的设计方式使得不需要对文档建立树形模型,就可以实现搜索,修改、添加和删除等操作,同时向应用程序屏蔽了底层的解析过程,编程更加简便。

 

二. 面向文档解析方式的性能比较

根据VTD-XML的官方网站的数据[11]VTD-XML的解析速度是DOM5x-10x,是SAXwith NULL content handler)的1.5x - 2.0xWith NULL content handler 意味着SAX解析中没有插入任何额外的处理逻辑,也就是SAX的最高速度)。VTD-XML的内存占用仅为原XML1.3x-1.5x(其中1.0x部分是原XML),而DOM的内存占用则是原XML4x-8x,对于一些大型的XML文档,使用DOM方式处理往往会出现内存溢出的错误。

    以下是SAXDOMVTD-XML三种XML解析方式的性能测试结果[10],如下表所示:

 

 

 

                     表2 SAXDOMVTD-XML性能比较

三、小结

随着XML的广泛应用,XML解析技术作为XML文档处理过程中关键的一环,对应用系统的整体性能有着重要影响。本文通过分析和比较4种主流XML解析技术的优缺点,使得开发人员能够针对具体的应用需求选择最为合适的解析技术。此外,对XML解析技术的深入研究对于促进XML的应用也有着积极的作用。

 

摘自: http://java.chinaitlab.com/XMLBeans/789848.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值