admin 管理员组文章数量: 1086019
2024年4月19日发(作者:个人导航页源码php)
维普资讯
第26卷第1期
、b1.26 No.1
辽宁工程技术大学学报
Journal of Liaoning Technical University
2007牟2月
Feb. 2007
文章编号:1008-0562(2007)01-0107.03
一
种解析大体积XML文件的方法及应用
扈庆l,方向0
(1.吉林大学电子科学与工程学院,长春130026;2.国家标准物质研究中心,北京100013)
摘 要:针对XML解析器在解析大体积XML文件时速度慢的缺点,提出了一种加快其解析速度的新方法,该方法通过对XML文
件中关键元素的存储地址编索引的方式实现了对所要解析内容的直接读取:同时给出了该方法的应用实例,并与别的解析方法进行了
比较,结果表明该方法能显著提高解析速度。
关键词:XML:解析器:直接读取
中图分类号:TP393 文献标识码:A ’
Method of parsing big volume XML ifle and application
HU Qing ,FANG Xiang
(1.College of Electronic Science and EngineeringJilin University,Changchun 130026,China;2.National
Research Center for CRM’S Beijing 100013,China)
Abstract:The naissance of XML brings a revolution of data exchange in Internet.But the speed of parsing XML
is an importnat factor to influence the application of XML.This paper bdngs forward a mehhod of parsing big
volume XML file which improves its speed.The parsing content Can be directly read and the parsing speed is
improved by indexing the storing addresses of key elements.An applied example of this method is given.The
result of comparison wiht other kinds of parsing methods shows that hte parsing speed Can be improved notably
bythismethod.
Key words:XML:parser:directly reading
分信息以后,就终止对文档的解析,当想要提取文
弓l 言
档中一小部分内容的时候(对许多基于XML的应用
来说,实际上没有必要读完整个XML文档,只是
XML文档的解析模式有2种:事件驱动模式和
提取文档的一部分数据),不需要把不必要的数据放
文档对象模式(DOM)。事件驱动模式就是解析器
到内存里面,这样不仅节省了系统资源,也节省了
在读取XML文档时将发生的事件通知应用程序,
处理时间 】。
触发一系列的事件,当发现给定的tag时激活一个
由于基于事件驱动模式是顺序解析,它的解析
回调方法来处理这个事件,处理完这一事件后解析
时间受所解析内容在整个XML文档中所处位置的
器就移动到文档的下一段进行解析。DOM是与平
影响,如果所解析内容在整个XML文档中的位置
台和语言无关的解析方式,是XML文档的官方
比较靠后,那么其解析速度也比较慢。为此,本文
W3C标准,当用DOM来解析一个XML文档时,
提出了在生成XML文档时对XML文档中关键元
首先是读取整个文档,把它分割成单个的对象(比
素的存储地址编索引,在解析XML文档时则通过
如元素,属性和注释等等),然后在内存中创建一
这些地址索引直接访问所要解析的内容。
个关于该文档的树结构,最后再对内存中的文档树
进行解析处理L1 J。
1 方法的提出
DOM的优点是编程容易,开发人员只要调用建
树的指令,然后再调用API访问所需的节点就能完
如果能在XML文档中对要解析的内容进行直
成解析任务。当需要处理大文件的时候,事件驱动
接访问,这将极大的提高XML文档的解析速度。
模式是较好的选择。事件驱动模式允许你在任何时
受这种思想的启发,提出了一种解析大体积XML
候终止解析,这样的一个好处是如果你只需要对文
文档的方法:在生成XML文档时,首先对XML
档的一部分信息进行处理的时候,可以在得到该部
文档中关键元素的存储地址编索引,然后再把这些
索引存储在XML文档的末尾;在访问XML文档
收稿日期:2006—05—20
基金项目:“十五”国家科技攻关重大项目(2004BA210A04)
作者简介:扈庆(1976.),男,重庆江津人,博士研究生,高级程序员,主要从事分析仪器数据处理等方面的研究。本文编校:杨瑞华
维普资讯
108 辽宁工程技术大学学报
<,Ydata>
第26卷
时,以二进制文件流的方式打开XML文档,读取
索引信息,找到所要查找元素的存储位置,然后根
据存储位置读取该元素的内容,最后把读取的内容
当成一个完整的XML文档进行解析。其生成和解
析大体积XML文档的主要步骤如下:
(1)生成XML文档,记录XML文档中关键
元素的存储地址。
(2)在XML文档后扩展index和indexOffset
</Xdata>
</Trace>
<Trace technique=”MS”>
<Coordinates linked=’’MSTIME’’>
<Xdata units="MASSZ”laelb=”质荷比”>
,/第1幅质谱图
<Values format=”FLOAT32”byteOrder=”
元素。
(3)在index元素的offset子元素中保存关键
元素的存储地址,在indexOffset元素中保存index
元素的存储地址。
(4)以二进制方式打开XML文档,在index
和indexOffset元素中查找所要解析内容存储地址。
(5)根据地址信息直接读取所要解析的内容,
再对读取的内容进行解析。
2方法的应用
GAML(GeneralizedAnalyticalMarkLanguage)tq
是美国Thermo LabSystems公司于2001年3月提出
的一种用于交换各种分析仪器数据的文件格式,关
于GAML更详细的信息见文献【7】。在应用中发现,
当GAML文档的体积比较大时,打开的速度非常
慢,而通常的分析数据文件如质谱、核磁等的数据
量都非常大,这极大的限制了GAML的应用。为
了提高它的解析速度,本文扩展了用于保存地址信
息的index和indexOffset元素;下面是用扩展后的
GAML来描述的某测试样品的质谱数据文件,此文
件共包括1幅色谱图和3234幅质谱图。
<?xml version=”1.0”encoding=”ISO・8859-1”?…>
<Gaml>
<integrity…>
<parameter…>
<Experiment>
<Collectdata>10/l2,2003</Collectdata>
<Parameter…>…</Parameter>
<Trace technique=”CHROM”>
<Xdata units=”MINITES”label=”时间”
valueorder=”ORDERED”>//色谱图
<Link linkref=’’MSTIME’’/Link>
<Values format=”FLOAT32” byteOrder=-'’
INTEL”numbervalues=”3234”>
P4WnQoVT…</Values>
//Base64编码的色谱数据
<Ydata units=”MILLIV0I S”label=”mV”>
<Values ofrmat=’’FLOAT32’’byteOrder=-’’INTEL’’>
Sv0I 32Aa...</Values>
Dn EL”numbervalues=”16”>
XSva3SDF,……</Values>l/Base64编码的质谱数据
<Ydata units=”Abunance”label=”丰度”>
<Values format=’’FL0 32”
byteOrder=’’INTEL’’>
SGva34dsa..,</Values>
</Ydata>
</Xdata>
<Xdata units=”MASSZ”label=”质量数”>
,/第2幅质谱图
<Xdata units=”MASSZ”label=”质量数”>
,/第3234幅质谱图
</Trace>
</Experiment>
</Gaml>
<index>
<offset id=”CHROM” start=”301”length=’'456’
,/色谱图的存储位置
<offset id=” 1 ” start=”757”length=”682’',>
,/第1幅质谱图的存储位置
<offset id=”3234” start=”26566521”length
=”726’,,> //第3234幅质谱图的存储位置
</index>
<indexOm;et id--”index” start=”26567247”
length=”130543”> //index元素的存储位置
由于在GAML文件中,通常的数据处理都是
对谱图进行处理,而谱图的属性及数据信息都存储
在Xdata元素中,因此,本文以Xdata为关键元素,
把所有Xdata元素的储地址都保存在index元素的
offset子元素中,把index元素的存储位置保存在
indexOffset元素中。在解析此文档时,首先以二进
制的方式打开并读取indexOffset元素,根据
indexOffset元素存储的地址信息读取index元素,
再在index元素中查找满足要求的offset子元素,
然后根据offset子元素保存的地址信息读取所要查
找的Xdata元素,最后把读取的Xdata元素作为一
个XML文件来解析,图1是应用此方法解析第N
幅质谱图的解析流程。
维普资讯
第l期 扈庆等:一种解析大体积XML文件的方法及应用
以二进制流的方式打开
AML又仟T
.
l09
Index地址错误
、L
J l
读取文件尾 00字节到BUF J
文件指针定位到start处
] BUF中查找<inde om
读戳indexUftset阴start
属1唪信到start蛮鼍
读取一行数据到BUF
J,
uF中杏
/—\
.//
无
一
\电ndex/
\
读取一行数据到BUF
.
≤
读取长度为Length
的数据到BUF中
、
有》 G第A有MLN文个件质谱中没图
文件指针定位到start处
一 季器
L
.提取谱图数据,并对以BASE64
编码的数据进行BASE64解码
l把BUF中的内容作为完捌
Jj 勺XML文档进行解析
、
图1 XML文件解析流程图
Fig 1.workflow chartofparsingXMLfile
从图l可以看出,本方法在读取Xdata元素之
前的所有操作都是以二进制流的形式来完成的,最
后再把Xdata元素作为完整的XML文档来进行解
析,而此时XML解析器要解析的内容与整个XML
引的方式实现了对所要解析内容的直接访问,提高
了解析速度;该方法比较适用于解析大体积XML
文档,并且一次只提取部分数据的情况。
参考文献:
【1】怀石工作室.XML完全手册【M】.北京:中国电力出版社,2000.
文件比起来要小的多,因此,解析速度也比解析整
个XML文件要快。本文做了一个实验,在VC6.0
下用MSXML3.0 DOM(文档对象模式)解析器解析
此文档的第l 500幅谱图所用时间为l 421 ms,用
MSXML3.0 SAX(事件驱动模式)解析器所用的时间
为256 ms,而在同样的条件下用本文所提出的方法
解析此文档所用的时间只要16 ms。通过比较可以
看出,这种解析方法大大的提高了XML解析器解
析大体积XML文档的解析速度。
【2】(美)马丁(Martin.D.).XML高级编程[MI.李吉,译.北京:北京工业出
版社.2001.
【3】吴恒山,熊波.可扩展标记语言XML的产生与应用技术【J】.计算
机工程与应用,2001,37(14):65.67.
【4】李勇军,冀汶莉,马光思.用dom解析xml文档【J】.计算机应
用2001.21(8):103—105.
【5】王芳,李正凡.用SAX解析xrrd文档的实现方法【J】.华东交通大
学学报,2004,21(1):84—86.
【6】王冲,J2ME开发平台上xml解析器的选择【J】.计算机工程与应
2结论
用,2003(31):133.135,
【7】李昕,李丽萍,常革新,基于XML的文档的动态产生【J】1辽宁工程技
术大学学报【J】.2005,25(1):104.106,
通过对XML文档中关键元素的存储地址编索
版权声明:本文标题:一种解析大体积XML文件的方法及应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713533866a639476.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论