CN102314371B - 基于可扩展标记语言的编码方法、解码方法及编解码装置 - Google Patents
基于可扩展标记语言的编码方法、解码方法及编解码装置 Download PDFInfo
- Publication number
- CN102314371B CN102314371B CN201110264116.2A CN201110264116A CN102314371B CN 102314371 B CN102314371 B CN 102314371B CN 201110264116 A CN201110264116 A CN 201110264116A CN 102314371 B CN102314371 B CN 102314371B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- decoded
- xml
- decoding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于可扩展标记语言的编码方法、解码方法及编解码装置,其中的编码方法为:获取待编码数据结构对应的XML报文模板;遍历XML报文模板,根据当前遍历到的节点存储的数据结构成员的相关信息,从待编码数据中获取与当前遍历到的节点对应的数据成员;对所述数据成员进行编码,得到编码后的数据。本发明实施例采用基于XML的编解码技术,大大简化了插件的制作过程,在图形界面中编辑XML与编写ASN代码相比更加简单。另外,应用本发明实施例,在添加或修改报文结构时,不需要编译插件,只需增加或修改XML报文模板即可,因而在使用和维护上都能节省大量的时间和人力。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于可扩展标记语言的编码方法、解码方法及编解码装置。
背景技术
目前,通常采用插件的方式来实现编解码,该插件的制作过程一般为:首先要调整编译器,之后编写ASN文件,再转化为C源文件,最后编译成动态链接库,供应用程序调用。
这种插件制作方式主要存在以下两点不足:
1)显而易见的,上述编解码插件的制作过程过于复杂;
2)应用不灵活,当需要增加或者修改报文结构的时候,需要重新编译整个文件,整个过程花费的时间比较多,维护起来需耗费大量的精力。
发明内容
本发明的目的在于提供一种基于可扩展标记语言的编码方法、解码方法及编解码装置,简化编解码插件的制作过程,方便使用和维护。
为实现上述目的,本发明实施例采用以下技术方案。
一种基于可扩展标记语言的编码方法,包括以下步骤:
获取待编码数据结构对应的XML报文模板,所述XML报文模板的节点中存储有该节点对应的数据结构成员的相关信息;
遍历所述XML报文模板,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述待编码数据中获取与所述当前遍历到的节点对应的数据成员;
对所述数据成员进行编码,得到编码后的数据。
其中,在所述获取待编码数据结构对应的XML报文模板之前,还包括:根据与所述待编码数据结构对应的XML模式构建所述XML报文模板。
其中,所述XML报文模板采用基本数据类型、结构数据类型和/或循环数据类型来构建。
一种基于可扩展标记语言的解码方法,包括以下步骤:
建立一个新的树形结构的数据列表,初始化为空;
获取待解码数据结构对应的XML报文模板,所述XML报文模板的节点中存储有与该节点对应的数据结构成员的相关消息;
遍历所述XML报文模板,根据当前遍历到的节点中存储的数据结构成员的相关消息,从所述待解码数据中获取到与当前遍历到的节点对应的数据成员,对数据成员进行解码,并在所述数据列表中建立新的节点以存放该解码后的数据。
其中,在获取待解码数据结构对应的XML报文模板之前,还包括:根据与所述待解码数据结构对应的XML模式构建所述XML报文模板。
其中,所述在从待解码数据中获取到与当前遍历到的节点对应的数据成员后对该数据成员进行解码时,
若当前遍历到的节点为基本数据类型,则解码过程进一步包括:从待解码数据中的相应位置提取K字节数据,在所述数据列表中建立新节点存放该K字节数据,该新节点的属性与当前遍历到的节点的属性相同;判断当前遍历到的节点是否有同级节点,若有,则进行递归解码;所述K为当前基本数据类型数据的字节数;
若当前遍历到的节点为结构数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;判断当前遍历到的节点是否有子节点和/或同级节点,若有,则进行递归解码;
若当前遍历到的节点为循环数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;若当前遍历到的节点的子节点有效且其循环值合法,则进行递归解码,并在数据列表中对应新节点中建立子节点以存放解码得到的数据。
一种基于可扩展标记语言的编解码装置,包括:
编码模块,用于获取待编码数据结构对应的XML报文模板,遍历该XML报文模板,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述待编码数据结构中获取与当前遍历到的节点对应的数据结构成员的值作为XML元素,对该XML元素编码得到编码后的数据;
解码模块,用于建立一个新的树形结构的数据列表,初始化为空;获取待解码数据结构对应的XML报文模板,遍历该XML报文模板,根据当前遍历到的节点中存储的数据结构成员的相关消息,从所述待解码数据中获取到与当前遍历到的节点对应的XML元素,对该XML元素进行解码,并在所述数据列表中建立新的节点以存放该解码后的数据。
其中,还包括XML报文模板构建模块,用于根据待编码/待解码数据结构对应的XML模式构建XML报文模板。
其中,还包括视图编辑模块,用于显示XML报文模板以及解码后的树形结构的数据列表,并提供编辑功能。
与现有技术相比,本本发明实施例具有以下有益效果:
本发明实施例采用基于XML的编解码技术,大大简化了插件的制作过程,在图形界面中编辑XML与编写ASN代码相比更加简单。另外,应用本发明实施例,在添加或修改报文结构时,不需要编译插件,只需增加或修改XML报文模板即可,因而在使用和维护上都能节省大量的时间和人力。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例中编解码装置结构示意图;
图2为本发明实施例中编码方法流程图;
图3为本发明实施例中解码方法流程图;
图4为本发明实施例中对于基本数据类型节点的处理流程图;
图5为本发明实施例中对于结构数据类型节点的处理流程图;
图6为本发明实施例中对于循环数据类型节点的处理流程图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,本实施例提供的编解码装置主要包括以下几个组成部分:XML报文模板构建模块、编码模块、解码模块和视图编辑模块。
如图2所示,编码过程为:
201、XML报文模板构建模块根据不同数据的结构来构建相应的XML报文模板;
202、编码模块获取待编码数据结构对应的XML报文模板;
203、遍历XML报文模板,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与当前遍历到的节点对应的数据成员;
204、对所获取的成员编码,得到编码后的数据。
如图3所示,解码过程为:
301、XML报文模板构建模块构建各种结构的XML报文模板;
302、建立新的树形结构的数据列表,初始化为空;
303、解码模块获取待解码数据结构对应的XML报文模板;
304、遍历XML报文模板,根据当前遍历到的节点中存储的数据结构成员的相关消息,从待解码数据中获取到与当前扫描到的节点对应的数据成员,在数据列表中建立相应节点;
305、根据当前遍历到的节点类型,对所获取的数据成员进行解码,并将解码后的数据存储数据列表的相应节点中。
下面将对本实施例编解码装置的各个组成部分分别进行描述:
一、视图编辑模块
在解码的时候,能够将解码后的数据通过树形结构的数据列表显示出来;在编码的时候,能够读取和显示所获取的XML报文模板,并提供编辑功能,在编辑结束后由编码模块进行编码。
二、XML报文模板构建模块
用于构建各种结构的XML报文模板,每个XML报文模板代表了一种报文结构。通常,采用三种数据类型即可构建出各种报文结构。这三种数据类型分别是基本数据类型、结构数据类型、循环数据类型,都是采用XML元素来表示,元素名代表它在报文树中的名字,属性值代表它的数据类型。
A、基本数据类型
属性值包括UINT8、UINT16、UINT32,分别代表此段数据的长度为1、2、4个字节。基本数据类型数据为整个报文树的末端,不能再拥有子节点。
举例如下:
UINT16 version;
UINT16 devType;
UINT16 direction;
UINT32 msgId;
B、结构数据类型
属性值为STRUCT,一个结构数据类型数据可以拥有任意类型任意数量的子节点。
举例如下:
C、循环数据类型
属性值为SEQUENCEOF。一个循环数据类型数据,有且只有一个基本数据类型数据成员和一个结构数据类型数据成员。其中,基本数据类型数据成员用于表示循环的次数,结构数据类型数据成员是循环的结构。
举例如下:
三、编码模块
用于对报文进行编码。在编码过程中,由上至下遍历所获取的与当前待编码报文结构对应的XML报文模板,将读取数据的值连接在一起。例如,编码后得到的XML文本数据为:
030000000001000000000000000800000ace000000000000200300010000000000000000000c000100000101000108011f49
四、解码模块
根据所获取的与当前待解码数据结构对应的XML报文模板,对待解码数据进行解码,并将解码后的数据通过树形结构的数据列表显示。整个解码过程是一个递归的过程。设DATA为待解码数据,XML NODE表示当前遍历到的XML报文模板中的节点,LIST为存放解码后数据的数据列表;在解码过程中,遍历XML报文模板,根据当前遍历到的节点类型对待解码数据中与该节点对应的数据成员进行解码。
对于基本数据类型,解码处理过程如图4所示:
401、根据XML报文模板中的相关信息确定XML NODE(本例中,该节点类型为基本数据类型)的字节长度K(UINT8为1字节,UINT16为2字节,UINT32为4字节);
402、判断DATA的剩余未解码部分长度是否大于K,若否,则停止解码并显示错误信息;若是,则执行步骤403;
403、根据XML报文模板中的相关信息从DATA中的相应位置取出与XML NODE相对应的K字节的数据成员,在LIST中建立与XML NODE属性相同的新节点,并在该新节点中存放上述K字节的数据;
404、根据XML报文模板判断XML NODE是否有同级节点,若有则对该同级节点进行递归解码。
对于结构数据类型,解码处理过程如图5所示:
501、在LIST中建立新的节点listchild,其属性与XML NODE相同;
502、根据XML报文模板判断XML NODE是否有子节点,若无,则执行步骤504;若有,则执行步骤503;
503、从DATA中取出相应数据成员进行递归解码,将解码得到的数据存入LIST中的相应节点中;
504、根据XML报文模板判断XML NODE是否有同级节点,若无,则结束;若有,则执行下一步;
505、从DATA中取出相应数据成员进行递归解码,将解码得到的数据存入LIST中的相应节点中。
对于循环数据类型,解码处理过程如图6所示:
601、在LIST中建立新的节点listchild,其属性与XML NODE相同;
602、根据XML报文模板判断XML NODE是否有子节点且是否有效,若是,则执行下一步;若否,则停止解码并显示错误信息;
603、从DATA中取出LOOP值,判断该值是否合法,若是,则执行下一步;若否,则停止解码并显示错误信息;
604、在LIST的节点listchild中建立新的节点loopchild,取得循环次数loopnum;
605、在节点loopchild中建立loopnum个loopstruct节点,进行递归解码并将解码后的数据存放至相应loopstruct节点中。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (5)
1.一种基于可扩展标记语言的解码方法,其特征在于,包括以下步骤:
建立一个新的树形结构的数据列表,初始化为空;
获取待解码数据结构对应的XML报文模板,所述XML报文模板的节点中存储有与该节点对应的数据结构成员的相关消息;
遍历所述XML报文模板,根据当前遍历到的节点中存储的数据结构成员的相关消息,从所述待解码数据结构中获取到与当前遍历到的节点对应的数据成员,对数据成员进行解码,并在所述数据列表中建立新的节点以存放该解码后的数据;
所述在从待解码数据结构中获取到与当前遍历到的节点对应的数据成员后对该数据成员进行解码时,
若当前遍历到的节点为基本数据类型,则解码过程进一步包括:从待解码数据结构中的相应位置提取K字节数据,在所述数据列表中建立新节点存放该K字节数据,该新节点的属性与当前遍历到的节点的属性相同;判断当前遍历到的节点是否有同级节点,若有,则进行递归解码;所述K为当前基本数据类型数据的字节数;
若当前遍历到的节点为结构数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;判断当前遍历到的节点是否有子节点和/或同级节点,若有,则进行递归解码;
若当前遍历到的节点为循环数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;若当前遍历到的节点的子节点有效且其循环值合法,则进行递归解码,并在数据列表中对应新节点中建立子节点以存放解码得到的数据。
2.如权利要求1所述的基于可扩展标记语言的解码方法,其特征在于,在获取待解码数据结构对应的XML报文模板之前,还包括:根据与所述待解码数据结构对应的XML模式构建所述XML报文模板。
3.一种基于可扩展标记语言的编解码装置,其特征在于,包括:
编码模块,用于获取待编码数据结构对应的XML报文模板,遍历该XML报文模板,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述待编码数据结构中获取与当前遍历到的节点对应的数据结构成员的值作为XML元素,对该XML元素编码得到编码后的数据;
解码模块,用于建立一个新的树形结构的数据列表,初始化为空;获取待解码数据结构对应的XML报文模板,遍历该XML报文模板,根据当前遍历到的节点中存储的数据结构成员的相关消息,从所述待解码数据结构中获取到与当前遍历到的节点对应的XML元素,对该XML元素进行解码,并在所述数据列表中建立新的节点以存放该解码后的数据;
所述在从待解码数据结构中获取到与当前遍历到的节点对应的数据成员后对该数据成员进行解码时,
若当前遍历到的节点为基本数据类型,则解码过程进一步包括:从待解码数据结构中的相应位置提取K字节数据,在所述数据列表中建立新节点存放该K字节数据,该新节点的属性与当前遍历到的节点的属性相同;判断当前遍历到的节点是否有同级节点,若有,则进行递归解码;所述K为当前基本数据类型数据的字节数;
若当前遍历到的节点为结构数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;判断当前遍历到的节点是否有子节点和/或同级节点,若有,则进行递归解码;
若当前遍历到的节点为循环数据类型,则解码过程进一步包括:在数据列表中建立新节点,该新节点与所述当前遍历到的节点的属性相同;若当前遍历到的节点的子节点有效且其循环值合法,则进行递归解码,并在数据列表中对应新节点中建立子节点以存放解码得到的数据。
4.如权利要求3所述的基于可扩展标记语言的编解码装置,其特征在于,还包括XML报文模板构建模块,用于根据待编码/待解码数据结构对应的XML模式构建XML报文模板。
5.如权利要求3或4所述的基于可扩展标记语言的编解码装置,其特征在于,还包括视图编辑模块,用于显示XML报文模板以及解码后的树形结构的数据列表,并提供编辑功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110264116.2A CN102314371B (zh) | 2011-09-07 | 2011-09-07 | 基于可扩展标记语言的编码方法、解码方法及编解码装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110264116.2A CN102314371B (zh) | 2011-09-07 | 2011-09-07 | 基于可扩展标记语言的编码方法、解码方法及编解码装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102314371A CN102314371A (zh) | 2012-01-11 |
CN102314371B true CN102314371B (zh) | 2017-04-12 |
Family
ID=45427563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110264116.2A Expired - Fee Related CN102314371B (zh) | 2011-09-07 | 2011-09-07 | 基于可扩展标记语言的编码方法、解码方法及编解码装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102314371B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622444B (zh) * | 2012-03-15 | 2014-09-03 | 深圳市同洲电子股份有限公司 | 一种xml报文处理方法和装置 |
CN107545008B (zh) * | 2016-06-27 | 2021-02-19 | 五八同城信息技术有限公司 | 数据的格式要求存储方法及装置 |
CN111628975B (zh) * | 2020-05-12 | 2023-06-27 | 中国人民银行清算总中心 | 一种组装xml报文的方法及装置 |
CN112785284A (zh) * | 2020-12-31 | 2021-05-11 | 银清科技有限公司 | 基于结构化文档的报文入库方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858717A (zh) * | 2005-05-08 | 2006-11-08 | 中兴通讯股份有限公司 | 一种数据编解码方法及其编解码器 |
CN101145157A (zh) * | 2007-06-14 | 2008-03-19 | 中兴通讯股份有限公司 | 一种xml格式嵌入式设备特征信息解析方法 |
CN101202739A (zh) * | 2006-12-11 | 2008-06-18 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理装置 |
CN101739462A (zh) * | 2009-12-31 | 2010-06-16 | 中兴通讯股份有限公司 | 可扩展标记语言编码方法、解码方法和客户端 |
CN101877158A (zh) * | 2010-03-23 | 2010-11-03 | 苏州德融嘉信信用管理技术有限公司 | 一种银行前置业务平台及其运行处理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030158805A1 (en) * | 2002-02-08 | 2003-08-21 | Brian Mozhdehi | Method of translating electronic data interchange documents into other formats and in reverse |
US20080071806A1 (en) * | 2006-09-20 | 2008-03-20 | Microsoft Corporation | Difference analysis for electronic data interchange (edi) data dictionary |
-
2011
- 2011-09-07 CN CN201110264116.2A patent/CN102314371B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858717A (zh) * | 2005-05-08 | 2006-11-08 | 中兴通讯股份有限公司 | 一种数据编解码方法及其编解码器 |
CN101202739A (zh) * | 2006-12-11 | 2008-06-18 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理装置 |
CN101145157A (zh) * | 2007-06-14 | 2008-03-19 | 中兴通讯股份有限公司 | 一种xml格式嵌入式设备特征信息解析方法 |
CN101739462A (zh) * | 2009-12-31 | 2010-06-16 | 中兴通讯股份有限公司 | 可扩展标记语言编码方法、解码方法和客户端 |
CN101877158A (zh) * | 2010-03-23 | 2010-11-03 | 苏州德融嘉信信用管理技术有限公司 | 一种银行前置业务平台及其运行处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102314371A (zh) | 2012-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102314371B (zh) | 基于可扩展标记语言的编码方法、解码方法及编解码装置 | |
CN102819492B (zh) | 一种基于Android的关键字驱动自动化测试框架 | |
Yu et al. | Maintaining invariant traceability through bidirectional transformations | |
CN104484269A (zh) | 一种自动生成测试脚本的方法 | |
CN104932905A (zh) | 一种aadl到c语言的代码自动生成方法 | |
Meyers et al. | A generic in-place transformation-based approach to structured model co-evolution | |
CN106503496A (zh) | 基于操作码替换与合并的Python脚本程序防逆转方法 | |
CN103714290A (zh) | 一种软件行为获取、监控与验证方法 | |
CN114816517B (zh) | 一种层次语义感知的代码表示学习方法 | |
CN101159743B (zh) | Asn.1编解码函数自动生成中的数据类型选择方法 | |
CN112287642B (zh) | 树形结构自增数据节点id及其路径链二进制编码方法 | |
CN103186582A (zh) | 基于设备描述文件的数据解析方法 | |
CN100579120C (zh) | 基于asn.1定义的pdu编解码代码自动生成的实现方法 | |
CN104199649B (zh) | 一种用于父子进程间交互信息的路径剖析方法 | |
Golas | Analysis and correctness of algebraic graph and model transformations | |
CN103984555B (zh) | 一种树表结合驱动Windows/Linux平台通讯协议源代码自动生成方法 | |
CN114816516A (zh) | 基于多重源码表示和循环神经网络的代码注释生成方法 | |
CN115237469A (zh) | 一种基于云服务源码的多模式架构逆向解析方法 | |
Fakhfakh et al. | Modeling and proving distributed algorithms for dynamic graphs | |
CN103853660A (zh) | 一种基于面向组件模型的软件构建及验证的方法 | |
CN106933563B (zh) | 一种页面流编辑器 | |
Voron et al. | Transforming sources to petri nets: a way to analyze execution of parallel programs. | |
CN107315587A (zh) | 一种基于二次链接的航天器在轨维护注入码生成方法 | |
Zibran | Management aspects of software clone detection and analysis | |
Figueira Goncalves et al. | Mdd4cpd: model driven development approach proposal for cyber-physical devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170412 Termination date: 20190907 |