zoukankan      html  css  js  c++  java
  • XML的解析方式(DOM、SAX、StAX)

    一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree-based API,比如说DOM,JDOM,DOM4j等等. 一般来说,读取配置文件时,我们一般比较喜欢应用tree-based API这种方式,就是把xml文件读入,变成DOM形式的一棵树,然后进行查找,获取自己想要的东西. 但是,这种方式有个缺点,那就是如果你这个XML文件很大的话,你需要占用很大的内存.
    所以对于很大的一个xml文件,又不需要进行随机查找的时候,比较适合采用event-based API,那就是说他解析xml文件,如果是START_ELEMENT,那么他就调用startElement()的回调方法..他遍历过了就过了,不能再回去.
    在event-based API中又存在两种方式: 一个是PUSH的方式,就比如说是SAX. 另外一种是PULL的方式,比如StAX.
    怎么来理解PUSH和PULL的区别呢. 先假设有这么三个角色: application, xmlFile, xmlParser. 那么,如果我们采用PUSH的方式,步骤为:
     1. 创建一个xmlParser.
     2. 把我们的application处理xml的注册到xmlParser.
     3. xmlParser遍历xmlFile,然后来调用application.
    这里面,用的是Observer的模式,就是接收到event的时候,去调用event的callback函数, 这里面有个很不好的地方就是,你application反而是被Parser控制了.
    于是,就出现了PULL方式的解析.
     1. 创建一个xmlParser
     2. xmlParser打开一个xmlFile
     3. application调用这个xmlParser, 来获取xmlParser打开xmlFile所得到的一系列event.
    这里,用到了Iterator的模式. 最主要的一点是: 这个时候application控制了xmlParser.
    StAX有两种API,一种是cursor-based,一种是iterator-based. 这两种详细的比较

    参考: http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP3.html#wp102139

    这里,SAX和StAX的另外一点区别是: SAX只能读xml文件. StAX不但能读xml文件,而且还能写xml文件.

    传统的处理XML的API有DOM和SAX两种,DOM速度慢,占用内存极大。SAX虽然比DOM快,但速度任不理想。现在,一种新的基于流的 Stream API for XML(简称 StAX)极大地提高了XML的处理速度,并且已经称为JSR 173标准(http://www.jcp.org/en/jsr/detail?id=173

    http://blog.chinaunix.net/uid-22342666-id-1774789.html

  • 相关阅读:
    厕所惊魂
    感谢协助学生返校,邀请交警合影留念
    小丑杀人
    东芝Toshiba e-STUDIO打印身份证
    JavaScript
    html
    pymysql模块
    线程
    队列与进程池
    网络编程
  • 原文地址:https://www.cnblogs.com/antis/p/5220909.html
Copyright © 2011-2022 走看看