admin 管理员组文章数量: 1184232
2024年4月20日发(作者:八种排序时间复杂度)
ISSN 1009—3044
E—mail:xsjl@dnzs.net.eIl
Computer Knowledge and Technology电脑知识与技术
http://www.dnzs.net.en
Vo1.10,No.1,January 2014
Te1:+86—55 1-65690963 65690964
基于XML的数据解析软件设计与实现
辛怀声,王鹏
(中国电子科技集团电子科学研究院,北京100041)
摘要:在开展数据处理和数据分析的工作前,常常需要对采集的原始数据进行解析处理,常规的方法是针对大量的数据接
口分别开发解析代码,这样做不仅工作量大,代码冗余度高,日后对接口进行修改或添加时都需要同步修改解析程序的相
应代码,给数据分析处理工作带来极大的困难。为了有效解决这一问题,该文提出了一种基于XML的数据解析方法,实
现接口定义和程序编码的隔离,能够在不改动程序代码情况下,实现数据接t2的按需添加或修改,有利于节约后期针对解
析程序的开发和维护成本。
关键词:XML;数据解析;隔离;接口
中图分类号:TP319 文献标识码:A 文章编号:1009—3044(2014)01—0057—03
Design and Implementation of a Data Parsing Software Based on XML
XIN Huai—sheng,WANG Peng
(Electronics Technology Academy of China Electronics Technology Group Corporation,Beijing 1 00041,China)
Abstract:Data parsing is always required before data processing and data analysis.Traditional way tO parse a data file is do coding
for each data interface.But this method will not only create a lot of redundant coding work,but also require a lot of maintenance
effort when there is a new data interface or a data interface changes.In order tO resolve this problem,a new data parsing method
which is based on XML is presented here.The data interfaces can be changed or added dynamically.however code modiifcation
ofr each interface will not be needed any more,and the maintenance and development COSt wil also be reduced.
Key words:XML;data parsing;separate;inte而ce
1概述
在日常软件工程中为了优化或者增加新功能往往需要对数据接口进行修改或删减。这时数据记录设备记录下来的数据格式
也会随之发生改变。对于事后的数据分析处理工作来说,这意味着数据解析的开发工作会伴随着数据接口的改变而一直进行。
经常出现的一种情况就是进行数据解析时程序报错,进行错误定位之后发现是数据格式发生了变化,于是需要对相应的数据接口
进行代码开发或更改,这给数据解析工作带了很大的不便,降低了数据分析的效率,也加大了数据解析和分析出错的几率。
2解决办法
可扩展标记语言(Extensible Markup Language,XML)是一种用于描述数据与平台无关的语言,以一种开放的自我描述方式定
义数据结构,在描述数据内容的同时突出对结构的描述,是一种存储结构化数据的规范”叫。XML是一种元标记语言,可以用来定
义其他的标记语言,并且这些标记语言的元素标记是由用户自己定义的。所以由XML可以派生出无限多种标记语言。在这些标
记语言必须根据一定得规则来定义和组织,但是这些标记在其含义上是非常灵活的 。
本文使用XML对接口数据进行映射,不在程序代码中对数据接口进行“硬编码”,之后针对XML生成文件解析指令序列,最后按
照指令序列对数据文件进行解析,把解析程序代码与接口定义进行隔离,从而使数据接口的更改对解析程序代码的影响降到最低。
3程序设计
3.1 XML与数据结构映射
待解析的数据都是由网络报文记录而成的二进制文件,报文内容如图1所示。
如图1所示,最前面的数据是消息代码,用来标识消息类型,之后是消息长度,用来标识消息之间的边界位置。通过这两个值
我们可以识别和解析数据文件中的所有二进制数据的内容。对于上述数据,我们可以用数据结构(steret)或类(class)来进行抽象。
如下面C++代码所示:
struet Header
{int messagetype;
int length;
收稿日期:2013—12—10
本栏目责任编辑:谢媛媛 软件设计开发 57
Computer Knowledge and Technology电脑知识与技术
第1O卷第1期(2014年1月)
消息类型 消息长度
~
! 一一 … .; 一 一 ;.
消息头
=进制数据
图1数据格式
char spare[4】
};
struct DataTypeA
・
{Header head;
intA:
int B
1;
接口数据类型DataTypeA包括了消息头结构和消息体数据A和B。消息头包括了消息类型消息长度和一些其他数据以及保留
数据空间。
进一步可以用XML对其进行表示,如下所示:
<?xml version=”1.0”encoding=”utf_8”?>
<Name>DataTypeA</Name>
<Structures>
<StruetDefinition Type=”HEADER”>
<Member ID=”MESSAGEJIYPE”Type=”int”Array=”1”Value=”0”Style=”element”/>
<Member ID=”MESSAGELEN”Type=”int”Array=”1”Value=”0”Style=”element”,>
_
<Member ID=”MESSAGESPARE”Type=”char”Array=”4”Value=”0”Style=”element”/>
—
</StructDefinition>
<StructDefinition Type=’’DataTypeA”>
<Member ID=”HEADER”Type=”HEADER”Array=”1”Value- ̄”0”Style=”structure”/>
<Member ID=”A”Type=”int”Array=”1”Value=”0”Style=”el6ment”/>
<Member ID=”B”Type=”int”Array=”1”Value=”0”Style=”element”/>
</StruetDefinition>
</Structures>
、
上面的XML中ID表示数据项名称。Array表示是否为数组,如果Array的值是1,则表示单个数据项,如果大于1,则表示一个
数组。Style表示是否为嵌套的数据结构,如果值为“element”表示不是数据结构,如果值为“structure”则表示是数据结构,需要从
XML中另行查找它的具体定义。从上面XML中可以看出,这里定义了两类数据结构,一类是HEADER数据结构,另一类是
DataTypeA数据结构,而DataTypeA数据结构又嵌套了HEADER数据结构。这与前面的c++代码是一致的。通过上面的步骤,我们
建立了一种二进制接口数据到XML的映射。
3.2文件解析指令序列
对数据接1:3进行XML映射之后,程序代码就可以与具体的数据接口定义进行隔离了,从而实现数据接口变化不影响程序代码
的目标。为了实现程序代码与数据接口隔离,程序将根据XML文件的内容生成一系列的数据解析指令。这里的指令序列指的是
由一系列文件读取的长度和数据类型组成的序列,如下表1所示:
表1数据解析指令序列
接口类型 数据名称
MESSAGE
TYPE
_
数据类型
int
MESSAGELEN
—
mt
char MESSAGESPARE
—
MESSAGESPARE
—
char
char
char
int
l
DataTypeA
MESSAGESPARE
—
MESSAGE SPARE
A
B lnt
之后我们就可以根据上述指令序列对待解析的文件进行解析读取。
58 软件设计开发 % 本栏目责任编辑:谢媛媛
第1O卷第1期(2014年1月)
单位R/s
l3
l2
Computer Knowledge and Technology电脑知识与技术
1t
lO
9
8
0
0
0
l 2 3 4 5 6 7 8 9 i0l1l213141516l7l8l92O21222324252627282930
客户端节点个数
图3 hadoop集群与普通服务器・眭能对比
3结论
通过对云计算基础知识、Hadoop云计算的介绍,搭建基于Hadoop的云平台,设计和实现了一个用于处理海量数据的校园资源
管理平台。通过测试实验表明,Hadoop在海量数据存储和处理上具有明显的优势和稳定性。同时,该系统平台可以部署在廉价的
通用硬件上,可以为学校减少购买服务器等资源的昂贵开支。总之,基于Hadoop云平台的校园资源管理,不仅可以降低硬件和软
件开发成本,提高安全性,而且系统应用效率也会有明显提高。然而,Hadoop集群在高并发低延时访问方面,优势并不明显,HDFS
系统需要进一步的优化才能够在校园资源管理平台上充分发挥其优势,所以本文接下来的主要工作是对HDFS系统性能进行优
化,比如,数据块的优化、负载均衡优化和文件下载启用多线程等使得HDFS系统应用更加实用和广泛。
参考文献:
(1】陈嘉恒.Hadoop实战[M】.北京:机械工业出版社,2012.1—35.
【2]刘鹏.实战Hadoop[M].北京:电子工业出版社,2011.卜83.
[3]周敏奇,王晓玲,金澈清,等.Hadoop权威指南[M].北京:清华大学出版社,201 1.1—73.
[4]曹宁,吴中海,刘宏志,等.HDFS下载效率的优化【J]_计算机应用,2010,30(8):2061—2065.
[5】韩海雯,齐德昱,封斌.基于云计算的广域级视频监控综合业务平台『J1_计算机工程与设计,2013,34(5):1657—1662.
【6】王梅,朱信忠,赵建民,等.基于Hadoop的海量图像检索系统 计算机技术与发展,2013,23(1):204-208.
[7】李杰辉,张亮,陈健,等.基于Hadoop的化合生物活性分析系统【J].计算机工程,2012,38(13):48—49.
[8杨峰,8]吴华端,朱华吉,等.基于Hadoop的海量农业数据资源管理平台 计算机工程,201 1,37(12):242-245.
[9】HADOOP Wi—ki[EB/OL].[2009—07—01】http//wiki.apache.org/hadoop/.
(上接第59页)
3.4文件数据解析流程
生成了接口数据类型对应的文件解析指令序列后,我们可以根据文件解析指令序列对文件进行解析。顺序读取解析指令,根
据数据类型决定调用的文件读取函数。例如:如果当前一条文件读取指令指示的数据类型为char,我们就可以调用相应的类似
ReadChar0之类的函数(由用户的变成语言确定);如果指示的数据类型为float,我们就可以调用类似ReadFloat0之类的函数。流程
如图3所示。
4结束语
由于大多数编程语言都对XML处理提供了强大的处理函数,该文介绍的利用XML文件映射接口数据,之后再解析数据的方
法可以用于大部分编程语言环境。本方法使程序代码与接口定义解除耦合关系,做到了新定义接口或修改后的接口的“即插即
用”,无需针对接口的修改对解析程序进行修改和重新编译,提高了数据解析的工作速度和正确率。
参考文献:
[1]甘小斌.XML标准体系介绍[J]_信息技术与标准化,2004(9):41—44.
[2】陈春咏.基T XML的指挥自动化辅助决策系统研究[D】.南京:东南大学,2007.
[3】怀石工作室.XML完全手册[M].北京:中国电力出版社,2000.
本栏目责任编辑:谢媛媛 软件设计开发 71
版权声明:本文标题:基于XML的数据解析软件设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713573068a641398.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论