zoukankan      html  css  js  c++  java
  • 解析XML的几种方式的原理与特点

    XML概述:

    XML英文全写为eXtensible Markup Language(称之为 可拓展的标记语言),它是由W3C制定出来的一套关于 数据传输,使传输的数据内容统一 的规范;它是跨平台并且与软硬件无关的工具,开发中经常用于去配置文件。

    解析XML的几种方式:

    XML的解析方式分为四种:DOM解析、SAX解析、JDOM解析、DOM4J解析,前两者是基础方法,后两者是扩展方法且只适用于Java平台。

    DOM解析(Document Object Model):

    是基于树型结构的节点或者是信息片段的集合;由于是树型结构的节点和信息片段的集合,所以在解析时需要加载整个文档和构造树型结构,然后才可以检索和更新节点信息,并且检索和更新效率会更高(因为是树型结构的方式);但对于比较大的文档在解析时会很耗资源(因为文档大所以解析时加载时间要长,内存要占的多,又要构造树型结构更耗时间)

    通过DOM接口,应用程序可以在任何时候访问xml文档中的任何一部分数据,因此利用DOM接口访问的方式也称之为随机访问。

    DOM解析的特点:

    优点:整个文档都在内存中,便于 CRUD等操作。

    缺点:文档较大会很消耗资源,不能解析比系统内存大的文档。

    SAX解析概述(Simple api for xml):

    是基于事件的解析器,主要是通过事件源和事件处理器来工作。当事件源产生事件后,调用事件处理器的处理方法即可解决;若是需要调用事件处理器的特定方法时,则需要传递给事件处理器所需要处理的事件的状态,这样事件处理器才能根据事件的状态信息进行相应的处理。PULL解析:和SAX解析类似,主要差别在于事件需要开发人员自己获取事件然后处理,不像SAX有处理器触发一个事件的方法来执行我们的代码。

    SAX解析的原理:

    对文档进行顺序扫描,在扫描到文档(Document)开始和结束/元素(Element)开始和结束等地方,通知事件处理函数进行对应的操作,然后重复扫描直到整个文档结束。

    SAX解析的特点:

    优点:可以边解析边调用执行、解析速度快,在sax过程中不能进行增删改

    缺点:不需要保存到系统内存,可以解析比系统内存大的文档

    JDOM解析概述:

    JDMO是一种解析XML的Java工具包,它基于树型结构,利用纯Java技术对xml文档实现解析(只适用于Java语言)

    JDOM解析特点:
    优点:使用大量的集合类而不是接口,简化了DOM的API,同时易于熟悉集合类的Java开发人员。

    缺点:灵活性和性能比较差(和DOM类似,大于10M的文档时内存溢出)

    http://www.ssnd.com.cn 化妆品OEM代加工

    DOM4J解析概述:

    DOM4J是一个开源的,易用的库,用于XML、Xpath、XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM、SAX、JAXP。

    DOM4J解析特点:

    简单易用,采用了Java的集合的框架,完全支持SAX,DOM和JAXP。
    优点 1、大量使用了Java的集合类,方便Java开发人员。2、支持XPath(用于对xml文档节点的选择)。3、性能较好。
    缺点 1、大量使用了接口,API较复杂。

    综述: 

    JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 DOM 和 JDOM。 虽然 JDOM 的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM 仍是一个非常好的选择。DOM 实现广泛应用于多种编程语言。它还是许多其它与 XML 相关的标准的基础,因为它正式获得 W3C 推荐(与基于非标准的 Java 模型相对),所以在某些类型的项目中可能也需要它(如在 JavaScript 中使用 DOM)。 
    SAX表现较好,这要依赖于它特定的解析方式。一个 SAX 检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。 无疑,DOM4J是最好的,目前许多开源项目中大量采用 DOM4J,例如大名鼎鼎的 hibernate 也用 DOM4J 来读取 XML 配置文件。如果不考虑可移植性,那就采用DOM4J吧!

  • 相关阅读:
    [CareerCup] 8.1 Implement Blackjack 实现21点纸牌
    [LeetCode] H-Index 求H指数
    [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
    [CareerCup] 7.6 The Line Passes the Most Number of Points 经过最多点的直线
    Ionic实战一:Ionic仿照微信项目
    ionic3+angular4+cordova 项目实例
    Android 给EditText添加下划线
    浅谈移动优先的跨终端Web 解决方案
    Android环信即时通讯集成坑爹 注册报错208解决
    Android自定义控件 -- 带边框的TextView
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/15003679.html
Copyright © 2011-2022 走看看