百度空间 | 百度首页 
               
 
查看文章
 
XML解析技术一览
2008-11-22 17:49
这几天正在做一个rss解析的java小程序,需要从指定的一个rss里边分析出文章列表,然后和数据库里边现有文章进行匹配,如果没有被抓取过,则入库。

经高人指点,使用了“Xml Pull Parser”来进行xml解析,采用了基于文件流的解析方式,一般被用来对xml文档进行快速而高效地解析。通过oracal网站的一篇《Parsing XML Efficiently》,发现这种解析技术实际上属于StAP的一种。这篇文章对时下的Xml解析技术进行了总结和归纳,对于想进行xml解析的技术人员来说还是具有参考价值的,因此顺带整理翻译了一下。

原文地址:http://www.oracle.com/technology/oramag/oracle/03-sep/o53devxml.html
——————————————————————————

Java里边解析xml一般有三种常用的技术:

1、 Document Object Model (DOM)W3C里边一种成熟的标准。

2、 Simple API for XML (SAX),第一种被广泛接受的XMLAPI,成为事实上的标准。

3、 Streaming API for XML (StAX),在JSR-173中提到的一种很有前途的新型解析模型。

DOM解析是基于树结构的,它通过在内存构建整棵文档树,允许完全、动态访问XML文档的任何节点。

2SAX

SAX解析XML采用事件驱动的方式。虽然并不是W3C的标准,但它的API是公认的,很多解析器都是基于它的。当SAX解析器读取文档的时候会引发很多事件,这些事件会交给对应的事件处理者(event handlers)。三种基本的事件:

1. DTDHandler 访问XMLDTD内容

2. ErrorHandler 解析错误

3. ContentHandler 访问文档的内容

3、 StAX

StAX是一种令人振奋的新型解析技术,和SAX一样,它也采用了事件驱动模型。不过,在对于事件的处理上,SAX采用了“推模式”(push modal),而StAX则使用的是“拉模式”(pull model)。说得更加明白一些,就是这样:

SAX是自己按顺序把整个文档解析完,在它解析的过程,会主动产生事件交给程序中相应的处理函数来处理当前内容;而StAX是由程序来驱动整个解析过程,只有当程序发出解析请求的时候,解析器才会告诉相应的事件,然后程序再决定如何处理当前内容。

从这个原理来判断的话,StAX的实现显然要更加灵活,程序可以选择自己需要处理的部分,而SAX则一定会遍历整个文档。而据我的理解,将StAX叫成“程序驱动模型”可能更利于理解一些。

最后,来个表格进行一下概述:

技术

有利

局限

适用于

DOM Parsing

1.易于上手

2.丰富的API,易于访问

3.整棵树被载入内存,能随机访问节点

1.整个文档必须一次解析完

2.载入文档树到内存代价昂贵

3.不利于实现对象类型绑定,需要给所有节点创建单独的类型

需要修改xml或者用来处理XSLT(不要用在对XML只有读操作的程序中)

SAX Parsing

1.没有将整个文档读入内存,内存耗费较低

2.“推模式允许注册多种内容处理器

1.没有内建的文档导航支持

2.不能随机访问XML文档

3.不支持命名空间

XML只有读操作的程序(不要用来操作和修改XML文档)

StAX Parsing

1.有针对简单和性能的两种解析模式

2.由程序控制解析器,易于支持多输入(easily supporting multiple inputs

3.强大的过滤功能有利于数据检索

1.没有内建的文档导航支持

2.不能随机访问XML文档

3.不支持修改XML文档

需要对XML文档进行流处理而且支持命名空间的程序(不要用来操作和修改XML文档)


类别:日积月累 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu