XML解析技术一览

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

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

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

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

 

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

 

2、SAX

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

1. DTDHandler 访问XML的DTD内容

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文档)

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值