zoukankan      html  css  js  c++  java
  • XML解析

    1、概述

      xml解析分为DOM解析,SAX解析,JDOM解析。DOM是基于节点的,必须遍历树的所有节点取出值,SAX是基于事件的,触发事件解析XML,  即SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。 

    2、练习

    3、各种解析方式的比较

    一、DOM:拉模型,把整个文档加载到内存中
            优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
            缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
           使用场合:一旦解析了文档还需多次访问这些数据;
                               硬件资源充足(内存、CPU)
    二、SAX:推模型,事件驱动编程,基于回调

           SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
           优点:不用事先调入整个文档,占用资源少;

           缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;
                        无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
          使用场合:

      数据量较大的XML文档,占用内存高,机器内存少,无法一次加载XML到内存;

    只需XML文档的少量内容,很少回头访问;
                              

    三、JDOM 
           为减少DOM、SAX的编码量,出现了JDOM;
            优点:20-80原则,极大减少了代码量,提供常用API减少重复劳动
           使用场合:要实现的功能简单,如解析、创建等
                               Java程序
            但在底层,JDOM还是使用SAX(最常用)、DOM

    1)  DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J. 

    2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明 他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语 言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在 javascript中使用DOM)。 

    3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。 

    3、室内的运用

      1)云端转码组件是解析HTML

      2)前后台交互的json报文,双方都需要解析XML报文,获取想要的值

    4、思考

     http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/17/3082949.html

  • 相关阅读:
    Leetcode: Insert Delete GetRandom O(1)
    Leetcode: Kth Smallest Element in a Sorted Matrix
    Leetcode: Combination Sum IV && Summary: The Key to Solve DP
    Leetcode: Wiggle Subsequence
    Leetcode: Guess Number Higher or Lower II
    Leetcode: Guess Number Higher or Lower
    Leetcode: Find K Pairs with Smallest Sums
    Leetcode: Super Pow
    Leetcode: Largest Divisible Subset
    Leetcode: Water and Jug Problem && Summary: GCD求法(辗转相除法 or Euclidean algorithm)
  • 原文地址:https://www.cnblogs.com/wanghongye/p/4756207.html
Copyright © 2011-2022 走看看