一种处理xml报文的方法和装置的制作方法

文档序号:7892992阅读:170来源:国知局
专利名称:一种处理xml报文的方法和装置的制作方法
技术领域
本发明涉及数据通信领域,特别涉及一种处理XML报文的方法和装置。
背景技术
XML (Extensible Markup Language,可扩展性标记语言),是标准通用语言。XML作为ー种便捷的操作数据和数据传输工具,在目前的Web开发中发挥着越来越重要的作用。现有的解析XML报文技术中,通常将接收的XML报文直接与预存的模板匹配,利用 该模板对XML报文进行解析,并输出解析結果。发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷如果XML报文数据过长,由于内存以及通信协议的限制,现有技术不能整体接收XML报文,无法对该XML报文做完整的解析。

发明内容
本发明提供了一种处理XML报文的方法和装置,解决了无法对大批量XML报文进行完整解析的问题。为达到上述目的,本发明实施例提出了一种处理XML报文的方法,包括以下步骤①、当满足预设条件时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到所述第二缓存区的XML报文数据时,将所述未被存储到所述第二缓存区的XML报文数据前移;所述第一缓存区用于存储接收到的XML报文数据;②、对所述第二缓存区中的XML报文数据进行解析,当所述第二缓存区存在未被成功解析的XML报文时,将所述第二缓存区中被成功解析的XML报文数据清除,将所述未被成功解析的XML报文数据前移,并返回步骤①;当所述第二缓存区不存在未被成功解析的XML报文,且最后一包XML报文没有全部被成功解析吋,将所述第二缓存区中的XML报文数据清除,并返回步骤①;当最后ー包XML报文全部被成功解析后,结束流程。本发明实施例还提出了一种处理XML报文的装置,包括存储模块,用于在满足预设条件时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区;第一处理模块,用于将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到所述第二缓存区的XML报文数据时,将所述未被存储到所述第二缓存区的XML报文数据前移;所述第一缓存区用于存储接收到的XML报文数据;解析模块,用于对所述第二缓存区中的XML报文数据进行解析;第二处理模块,用于在所述第二缓存区存在未被成功解析的XML报文时,将所述第二缓存区中被成功解析的XML报文数据清除,将所述未被成功解析的XML报文数据前移,并触发所述存储模块;在所述第ニ缓存区不存在未被成功解析的XML报文,且最后一包XML报文没有全部被成功解析吋,将所述第二缓存区中的XML报文数据清除,并触发所述存储模块。本发明实施例的技术方案中,通过第一缓存区存储接收到的XML报文数据,在满足预设条件时,将第一缓存区中的数据存储到第二缓存区,并对第二缓存区中的数据进行解析,能够分批接收、分批解析XML报文数据,有效地解决了批量XML报文不能被完整解析的问题。


图I为本发明实施例一提供的一种处理XML报文的方法流程图;图2为本发明实施例ニ提供的一种处理XML报文的方法流程图;图3为本发明实施例三提供的ー种解析XML报文数据的方法流程图; 图4为本发明实施例四提供的ー种解析开始标签的方法流程图;图5为图4中步骤42-1的具体实现过程流程图;图6为本发明实施例五提供的ー种解析结束标签的方法流程图;图7为本发明实施例六提供的ー种解析XML报文标签内容的流程图;图8为本发明实施例七提供的一种处理XML报文的装置;
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在数字通信技术中,数据发送端可以采用XML格式传输数据,数据接收端可以多次接收XML报文,并对接收到的XML报文进行解析,直至所有的XML报文解析完毕。本发明实施例一提供了一种处理XML报文的方法,如图I所示,包括以下步骤步骤101 :等待接收XML报文,并将接收到的XML报文存储到第一缓存区;在本实施例中,所述第一缓存区用于存储接收的XML报文;步骤102 :根据当前接收的XML报文更新第一计数器;在本实施例中,更新所述第一计数器,具体为将所述第一计数器的计数值更新为所述第一计数器的当前计数值与所述当前接收到的XML报文的长度之和;其中,所述第一计数器的初始计数值为零;步骤103 :根据包标识位的取值判断当前XML报文是否为最后一包XML报文,是则执行步骤110 ;否则执行步骤104 ;具体地,在本实施例中,所述包标识位的取值包括O和I,所述包标识位的取值为O时,表示当前XML报文不是最后一包XML报文;所述包标识位的取值为I时,表示当前XML报文是最后ー包报文;步骤104 :判断所述第一计数器的计数值是否小于第二缓存区的最大存储值,是则返回步骤101 ;否则执行步骤105 ;步骤105 :从所述第一缓存区中选取XML报文数据,并将选取的XML报文数据存储到所述第二缓存区;具体地,从所述第一缓存区中选取最先接收到的、数据长度等于所述第二缓存区的剰余空间长度的XML报文数据;步骤106 :对所述第二缓存区中的XML报文数据进行解析,返回已成功解析的XML报文结果数据;步骤107 :将被成功解析的XML报文结果数据存入所述结果缓存区;在本实施例中,所述结果缓存区用 于存储被成功解析的XML报文结果数据;所述XML报文结果数据包括解析后报文结果和被成功解析的报文长度。步骤108 :根据被成功解析的XML报文长度清空所述第二缓存区中被成功解析的XML报文,并更新所述第一计数器;本实施例中,更新所述第一计数器,具体为将所述第一计数器的计数值更新为所述第一计数器的当前计数值与所述被成功解析的XML报文数据的长度之差;步骤109 :将所述第二缓存区中未被成功解析的XML报文数据前移,并返回步骤104 ;步骤110 :判断所述第一计数器的计数值是否小于所述第二缓存区的最大存储值,是则执行步骤116 ;否则执行步骤111 ;步骤111 :从所述第一缓存区中选取XML报文数据,并将选取的XML报文数据存储到所述第二缓存区;具体地,从所述第一缓存区中选取最先接收到的、数据长度等于所述第二缓存区的剰余空间长度的XML报文数据;步骤112 :对所述第二缓存区中的XML报文数据进行解析,返回已成功解析的XML报文结果数据;步骤113 :将被成功解析的XML报文结果数据存入所述结果缓存区;在本实施例中,所述结果缓存区用于存储被成功解析的XML报文结果数据;所述XML报文结果数据包括解析后报文结果和被成功解析的报文长度。步骤114 :根据被成功解析的XML报文长度清空所述第二缓存区中被成功解析的XML报文,并更新所述第一计数器;本实施例中,更新所述第一计数器,具体为将所述第一计数器的计数值更新为所述第一计数器的当前计数值与所述被成功解析的XML报文数据的长度之差;步骤115 :将所述第二缓存区中未被成功解析的XML报文数据前移,并返回步骤110 ;步骤116 :将所述第一缓存区中的XML报文数据存储到所述第二缓存区;步骤117 :对所述第二缓存区中的XML报文数据进行解析,并将所述第二缓存区中被成功解析的XML报文数据清除;步骤118 :将XML报文结果数据存入结果缓存区,将结果缓存区中全部XML报文结果数据存入第二缓存区,并返回XML报文结果数据。本发明实施例一中,先根据包标识位的取值判断XML报文是否为最后一包XML报文,再判断所述第一计数器的取值是否小于第二缓存区的剰余空间长度。在本发明的其他实施例中,也可以先判断所述第一计数器的取值是否小于第二缓存区的剰余空间长度,如果小干,再根据包标识位的取值判断XML报文是否为最后ー包报文,具体流程见实施例ニ。
实施例ニ本发明实施例ニ提供了一种处理XML报文的方法,如图2所示,一种处理XML报文的方法,包括以下步骤步骤201 :等待接收XML报文,并将接收到的XML报文存储到第一缓存区;步骤202 :根据当前接收的XML报文更新所述第一计数器;在本实施例中,更新所述第一计数器,具体为将所述第一计数器的计数值更新为所述第一计数器的当前计数值与所述接收到的XML报文的长度之和;其中,所述第一计数器的初始计数值为零;步骤203 :判断所述第一计数器计数值是否小于第二缓存区的最大存储值,是则执行步骤209 ;否则执行步骤204 ;步骤204 :从所述第一缓存区中选取XML报文数据,并将选取的XML报文数据存储到所述第二缓存区;具体地,从所述第一缓存区中选取接收时间最早、数据长度等于所述第二缓存区的剰余空间长度的XML报文数据;步骤205 :对所述第二缓存区中的XML报文数据进行解析,返回被成功解析的XML报文结果数据;步骤206 :将被成功解析的XML报文结果数据存入所述结果缓存区;在本实施例中,所述结果缓存区用于存储被成功解析的XML报文结果数据;XML报文结果数据包括解析后报文结果和被成功解析的报文长度。步骤207 :根据被成功解析的XML报文长度清空所述第二缓存区中被成功解析的XML报文,并更新所述第一计数器;本实施例中,更新所述第一计数器,具体为将所述第一计数器的计数值更新为所述第一计数器的当前计数值与所述被成功解析的XML报文数据的长度之差;步骤208 :将所述第二缓存区中未被成功解析的XML报文数据前移,并返回步骤203 ;步骤209 :判断所述第一缓存区中的XML报文数据是否为最后一包XML报文中的数据,是则执行步骤210 ;否则返回步骤201 ;步骤210 :将所述第一缓存区中的XML报文数据存储到所述第二缓存区;步骤211 :对所述第二缓存区中的XML报文数据进行解析,并将所述第二缓存区中被成功解析的XML报文数据清除;步骤212 :将XML报文结果数据存入结果缓存区,将结果缓存区中全部XML报文结果数据存入处理缓冲区,并返回XML报文结果数据。需要说明的是,在本发明的其他实施方式中,也可以在所述第一缓存区中的XML报文数据的长度大于或等于预设值时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,并对第二缓存区中的数据进行解析;还可以设置计时器,在计时器的值大于或等于预设时间时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,并对第ニ缓存区中的数据进行解析。上述实施方式均可以实现本发明的发明目的。在实施例一与实施例ニ中,对所述第二缓存区中对XML报文数据进行解析,具体流程见实施例三。实施例三本发明实施例三提供了ー种解析XML报文数据的方法,如图3所示,包括以下步骤步骤301 :根据所述第二缓存区中XML报文的长度设置第二计数器;在本实施例中,所述第二计数器用于计数第二缓存区中XML报文数据的长度;步骤302 :对第一状态位进行初始化; 在本实施例中,对第一状态位进行初始化,具体为将第一状态位的取值初始化为
第一预设值;步骤303 :判断所述第二计数器的计数是否为零,是则执行步骤306 ;否则执行步骤 304 ;步骤304 :根据第一指针变量的值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,并更新所述第一指针变量和所述第二计数器的计数;在本实施例中,所述第一指针变量用于指示当前读取的字节的位置;更新所述第一指针变量和所述第二计数器的计数,分别包括将所述第一指针变量的值加一,将所述第ニ计数器的计数值减ー;步骤305 :判断所述第一状态位的取值;根据不同的取值,执行相应的操作;在本实施例中,所述第一状态位的取值包括第一预设值、第二预设值;优选地,在本实施例中,所述第一预设值的取值为0,所述第二预设值的取值为I ;当所述第一状态位的取值为第一预设值时,执行操作如下31-1 :判断当前读取的字节数据是否为第一符号标识,是则执行步骤31-2 ;否则执行步骤31-4 ;其中,第一符号标识为“<”;步骤31-2 :将所述第一状态位的取值修改为第二预设值;步骤31-3 :对第一指针变量和第一深度变量进行备份,返回步骤303 ;在本实施例中,对所述第一指针变量和所述第一深度变量进行备份,包括将所述第一指针变量的值赋值给第二指针变量,将所述第一深度变量的值赋值给第二深度变量;在本实施例中,所述第一深度变量用于表示当前标签在深度数组中所处的位置;所述深度数组用于存储标签名和标签名长度;步骤31-4 :判断当前字节数据是否为有效的ASCII码,是则执行步骤31_5 ;否则返回步骤303 ;步骤31-5 :读取与所述当前字节数据在同一个标签内容中的其他字节数据,对所述标签内容进行处理,处理完毕后,返回步骤303 ;其中,对所述标签内容进行处理,具体过程參见实施例六;当所述第一状态位的取值为第二预设值时,执行操作如下32-1 :判断当前读取的字节数据是否为第二符号标识,是则执行步骤32-2 ;否则执行步骤32-3 ;其中,所述第二符号标识具体为“/” ;32-2 :读取与当前字节数据在同一个结束标签中的其他字节数据,对所述结束标签进行处理,返回步骤303 ;其中,对所述结束标签进行处理,具体过程參见实施例五;32-3 :读取与当前字节数据在同一个开始标签中的其他字节数据,对所述开始标签进行处理;其中,对所述开始标签进行处理,具体过程參见实施例四;步骤306 :对所述第一指针变量和所述第一深度变量恢复备份。在本实施例中,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所 述第二指针变量的值和所述第二深度变量的值分别赋值给所述第一指针变量和所述第一深度变量;本发明实施例三中,对所述开始标签进行解析的方法,具体流程见实施例四。实施例四本发明实施例四提供了ー种解析开始标签的方法,下面将结合图4对所述方法进行详细的介绍。如图4所示,ー种解析开始标签的方法,包括以下步骤步骤401 :对所述第一深度变量的值进行加一操作,并设置第三指针变量;在本实施例中,所述第三指针变量用于记录并获取属性信息、标签名以及标签内容信息;步骤402 :对第二状态位和第三状态位进行初始化;在本实施例中,对第二状态位和第三状态位进行初始化,具体为将所述第二状态位和所述第三状态位的取值分别初始化为第三预设值和第四预设值;步骤403 :判断所述第二计数器的计数是否为0,是则执行步骤406 ;否则执行步骤404 ;步骤404:根据所述第一指针变量的值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,并更新所述第一指针变量和所述第二计数器的计数;在本实施例中,更新所述第一指针变量的值的具体操作为将所述第一指针变量的值进行加一操作;更新所述第二计数器的计数包括将所述第二计数器的计数进行减ー操作;步骤405 :判断第二状态位的取值;根据不同的取值,执行相应的操作;具体地,在本实施例中,所述第二状态位的取值包括第三预设值、第五预设值;当所述第二状态位的取值为第三预设值时,执行操作如下41-1 :判断当前读取的字节内容是否为第二符号标识或第四符号标识,是二者中任意一个则执行步骤41-2 ;否则返回步骤403 ;其中,所述第二符号标识具体为“/”,第四符号标识具体为空格;41-2 :根据所述第一指针变量和所述第二指针变量得到开始标签名的长度;在本实施例中,根据所述第一指针变量和所述第二指针变量得到开始标签名的长度,包括所述第一指针变量的值减去所述第二指针变量的值后得到的值;41-3 :根据所述第一指针变量和所述第二指针变量获取开始标签名,并将所述开始标签名和所述开始标签名的长度存入所述深度数组中深度变量的值所表示的位置;
在本实施例中,获取开始标签名具体操作为提取所述第三指针变量记录的位置至第一指针变量记录的位置的内容;41-4 :判断当前读取的字节内容是否为第四符号标识,是则执行步骤41-5 ;否则执行步骤41-6 ;41-5 :将所述第二状态位的取值修改为第五预设值,返回步骤403 ;41-6 :将所述第一状态位的取值修改为第一预设值,并返回步骤303 ;当所述第二状态位的取值为第五预设值时,执行操作如下42-1 :判断所述第三状态位的取值;根据不同的取值,执行相应的操作,具体步骤參见图5 ;在本实施例中,所述第三状态位的取值包括第四预设值、第六预设值、第七预设值、第八预设值;当所述第三状态位的取值为第四预设值时,执行操作如下01-01 :判断当前读取的字节内容是否为第三符号标识,是则执行步骤01-02 ;否则执行步骤01-03 ;其中,所述第三符号标识为“>”;01-02 :将所述第一状态位的取值修改为第一预设值,并返回步骤303 ;01-03 :将所述第三状态位的取值修改为第六预设值,返回步骤403 ;当所述第三状态位的取值为第六预设值时,执行操作如下02-01 :判断当前读取的字节内容是否为符号第五符号标识,是则执行步骤02-02 ;否则返回步骤403 ;其中,所述第五符号标识为“=”;02-02 :将所述第三状态位的取值修改为第七预设值,返回步骤403 ;当所述第三状态位的取值为第七预设值时,执行操作如下03-01 :判断当前读取的字节内容是否为第六符号标识,是则执行步骤03-02 ;否则返回步骤403 ;其中,所述第六符号标识为左引号““ ”;03-02 :更新所述第三指针变量;在本实施例中,更新所述第三指针变量,具体为,将所述第三指针变量的值修改为所述第一指针变量加一操作后的值;03-03 :将所述第三状态位的取值修改为第八预设值,返回步骤403 ;当所述第三状态位的取值为第八预设值时,执行操作如下04-01 :判断当前读取的字节内容是否为第七符号标识,是则执行步骤04-02,否则返回步骤403 ;04-02 :根据所述第一指针变量的值和第三指针变量的值获取标签属性信息; 具体地,获取标签属性信息的具体操作为提取所述第三指针变量记录的位置至第一指针变量记录的位置的内容;04-03 :将所述第一状态位的取值修改为第一预设值,并返回步骤303 ;步骤406 :对所述第一指针变量和所述第一深度变量恢复备份。在本实施例中,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所述第二指针变量的值和所述第二深度变量的值分别赋值给第一指针变量和所述第一深度
变量;本发明实施例三中,对所述结束标签进行解析的方法,具体流程见实施例五。实施例五本发明实施例五提供了ー种解析结束标签的方法,下面将结合图6对所述方法进行详细的介绍。如图6所述,ー种处理结束标签的方法包括步骤601 :判断所述第二计数器的计数是否为0,是则执行步骤608 ;否则执行步骤602 ; 步骤602 :根据所述第一指针变量的值读取当前字节数据,并更新所述第一指针变量的值和所述第二计数器的计数;在本实施例中,更新所述第一指针变量的值的具体操作为将所述第一指针变量的值进行加一操作;重置所述第二计数器的计数包括将所述第二计数器的计数值进行减一操作,执行步骤603 ;步骤603 :判断当前字节内容是否为第三符号标识,是则执行步骤604 ;否则返回步骤601 ;其中,所述第三符号标识为“>”;步骤604 :根据所述第一指针变量和所述第二指针变量获取结束标签名和结束标签名的长度;在本实施例中,获取结束标签名具体操作为提取所述第三指针变量的值所表示的位置至所述第一指针变量所表示的位置的内容;获取结束标签的长度具体操作为所述第一指针变量的值减去所述第二指针变量的值后得到的值;步骤605 :判断所述结束标签名和所述结束标签名的长度是否分别与所述深度数组中所述第一深度变量表示的位置存储的所述开始标签名和所述开始标签名的长度相同,若相同则执行步骤606 ;否则返回错误信息;步骤606 :对所述深度变量的取值进行减ー操作;步骤607 :将所述第一状态位的取值修改为所述第一预设值,返回步骤303 ;步骤608 :对所述第一指针变量和所述第一深度变量恢复备份。具体地,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所述第二指针变量的值赋值给所述第一指针变量,将所述第二深度变量的值赋值给所述第一深度变量;本发明实施例三中,对所述标签内容进行解析的方法,具体流程见实施例六。实施例六本发明实施例六提供了ー种解析标签内容的方法,下面将结合图7对所述方法进行详细的介绍。如图7所示,ー种解析标签内容的方法,包括步骤701 :将所述第一指针变量的值赋值给所述第三指针变量;步骤702 :判断所述第二计数器的计数是否为0,是则执行步骤707 ;否则执行步骤703 ;
步骤703 :根据所述第一指针变量的值读取当前字节数据,并更新所述第一指针变量的值和第二计数器的计数;在本实施例中,更新所述第一指针变量的值具体为将所述第一指针变量的值进行加一操作;更新第二计数器的计数具体为将所述第二计数器的计数值进行减一操作;步骤704 :判断当前读取的字节内容是否为第一符号标识,是则执行步骤705 ;否则执行步骤702 ;其中,所述第一符号标识为“く”
步骤705 :对所述第一指针变量的值进行减ー操作;步骤706 :根据所述第一指针变量的值和所述第三指针变量的值获取所述标签内容;在本实施例中,获取标签内容,具体为获取所述第三指针变量的值所表示的位置至所述第一指针变量的值所表示的位置之间的内容;步骤707 :对所述第一指针变量和所述第一深度变量恢复备份;在本实施例中,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所述第二指针变量的值和所述第二深度变量的值分别赋值给第一指针变量和所述第一深度变量。实施例七本发明实施例七提供了一种处理XML报文的装置,如图8所示,ー种XML报文解析的装置可以包括判断模块801、存储模块802、第一处理模块803、解析模块804、第二处理模块805 ;所述判断模块801,用于判断所述第一缓存区中的XML报文数据的长度是否大于或等于第二缓存区的剰余空间长度;或者,用于判断所述第一缓存区中的XML报文数据是否为最后一包XML报文的数据;或者,用于判断是否接收到XML报文,再判断接收到的XML报文是否大于或等于预设值;所述存储模块802,用于将第一缓存区中的部分或全部XML报文数据存储到第二缓存区;所述第一处理模块803,用于将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到所述第二缓存区的XML报文数据吋,将所述未被存储到所述第二缓存区的XML报文数据前移;所述解析模块804,用于对所述第二缓存区中的XML报文数据进行解析;具体执行步骤SI :将第二计数器的计数值设置为所述第二缓存区中的XML报文数据的长度,将第一状态位的取值初始化为第一预设值;S2 :判断所述第二计数器的计数值是否为零,如果为零,则执行步骤SI ;否则,执行步骤S3 ;
S3:根据第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减1,对所述第一状态位的取值进行判断,如果所述第一状态位的取值为第一预设值,则执行步骤S4 ;如果所述第一状态位的取值为第二预设值,则执行步骤S8 ;
S4 :判断所述当前字节数据是否为第一符号标识,如果是,则执行步骤S5 ;否则,执行步骤S6 ;S5:将所述第一状态位的取值修改为所述第二预设值,将所述第一指针变量的取值赋值给第二指针变量,将第一深度变量的取值赋值给第二深度变量,并返回步骤S2 ;S6 :判断所述当前字节数据是否为有效的ASCII码,如果是,则执行步骤S7 ;否则,返回步骤S2 ;S7 :读取与所述当前字节数据在同一个标签内容中的其他字节数据,对所述标签内容进行处理,并在处理完毕后,返回步骤S2 ;S8 :判断所述当前字节数据是否为第二符号标识,如果是,则执行步骤S9 ;否则,执行步骤Sio ;S9 :读取与所述当前字节数据在同一个结束标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第二缓存区存储有所述结束标签的全部字节数据,则对所述结束标签进行处理,并在处理得到的结束标签名和结束标签名的长度分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度存储深度数组相同吋,将所述第一深度变量的取值减1,将所述第一状态位的取值修改为所述第一预设值,返回步骤S2 ;在处理得到的结束标签名和结束标签名的长度不分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度存储深度数组相同时,返回错误信息;如果所述第二缓存区没有存储所述结束标签的全部字节数据,则执行步骤Sll ;SlO :将所述第一深度变量的取值加1,读取与所述当前字节数据在同一个开始标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第二缓存区存储有所述开始标签的全部字节数据,则对所述开始标签进行处理,并在处理完毕后,将所述第一状态位的取值修改为所述第一预设值,返回步骤S2 ;如果所述第ニ缓存区没有存储所述开始标签的全部字节数据,则执行步骤Sll ;Sll :将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。所述步骤S7,具体包括步骤7-01 :将所述第一指针变量的值赋值给所述第三指针变量;步骤7-02 :判断所述第二计数器的计数是否为0,是则执行步骤7-07 ;否则执行步骤 7-03 ;步骤7-03 :根据所述第一指针变量的值读取当前字节数据,并更新所述第一指针变量的值和第二计数器的计数;在本实施例中,更新所述第一指针变量的值具体为将所述第一指针变量的值进行加一操作;更新第二计数器的计数具体为将所述第二计数器的计数值进行减一操作;步骤7-04 :判断当前读取的字节内容是否为第一符号标识,是则执行步骤7-05 ;否则执行步骤7-02 ;其中,所述第一符号标识为“く”步骤7-05 :对所述第一指针变量的值进行减ー操作;步骤7-06 :根据所述第一指针变量的值和所述第三指针变量的值获取所述标签内容;在本实施例中,获取标签内容,具体为获取所述第三指针变量的值所表示的位置至所述第一指针变量的值所表示的位置之间的内容;步骤7-07 :对所述第一指针变量和所述第一深度变量恢复备份;在本实施例中,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所 述第二指针变量的值和所述第二深度变量的值分别赋值给第一指针变量和所述第一深度变量。所述步骤S9,具体包括步骤9-01 :判断所述第二计数器的计数是否为0,是则执行步骤9-08 ;否则执行步骤 9-02 ;步骤9-02 :根据所述第一指针变量的值读取当前字节数据,并更新所述第一指针变量的值和所述第二计数器的计数;在本实施例中,更新所述第一指针变量的值的具体操作为将所述第一指针变量的值进行加一操作;重置所述第二计数器的计数包括将所述第二计数器的计数值进行减一操作,执行步骤9-03 ;步骤9-03 :判断当前字节内容是否为第三符号标识,是则执行步骤9-04 ;否则返回步骤9-01 ;其中,所述第三符号标识为“>”;步骤9-04 :根据所述第一指针变量和所述第二指针变量获取结束标签名和结束标签名的长度;在本实施例中,获取结束标签名具体操作为提取所述第三指针变量的值所表示的位置至所述第一指针变量所表示的位置的内容;获取结束标签的长度具体操作为所述第一指针变量的值减去所述第二指针变量的值后得到的值;步骤9-05 :判断所述结束标签名和所述结束标签名的长度是否分别与所述深度数组中所述第一深度变量表示的位置存储的所述开始标签名和所述开始标签名的长度相同,若相同则执行步骤9-06 ;否则返回错误信息; 步骤9-06 :对所述深度变量的取值进行减ー操作;步骤9-07 :将所述第一状态位的取值修改为所述第一预设值,返回步骤S3 ;步骤9-08 :对所述第一指针变量和所述第一深度变量恢复备份。具体地,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所述第二指针变量的值赋值给所述第一指针变量,将所述第二深度变量的值赋值给所述第一深度变量;所述步骤S10,具体包括步骤10-01 :对所述第一深度变量的值进行加一操作,并设置第三指针变量;在本实施例中,所述第三指针变量用于记录并获取属性信息、标签名以及标签内容信息;步骤10-02 :对第二状态位和第三状态位进行初始化;在本实施例中,对第二状态位和第三状态位进行初始化,具体为将所述第二状态位和所述第三状态位的取值分别初始化为第三预设值和第四预设值;步骤10-03 :判断所述第二计数器的计数是否为0,是则执行步骤10-06 ;否则执行步骤10-04 ;步骤10-04 :根据所述第一指针变量的值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,并更新所述第一指针变量和所述第二计数器的计数;在本实施例中,更新所述第一指针变量的值的具体操作为将所述第一指针变量的值进行加一操作;更新所述第二计数器的计数包括将所述第二计数器的计数进行减ー操作;步骤10-05 :判断第二状态位的取值;根据不同的取值,执行相应的操作;具体地,在本实施例中,所述第二状态位的取值包括第三预设值、第五预设值;当所述第二状态位的取值为第三预设值时,执行操作如下41-1 :判断当前读取的字节内容是否为第二符号标识或第四符号标识,是二者中任意一个则执行步骤41-2 ;否则返回步骤10-03 ;其中,所述第二符号标识具体为“/”,第四符号标识具体为空格;41-2 :根据所述第一指针变量和所述第二指针变量得到开始标签名的长度;在本实施例中,根据所述第一指针变量和所述第二指针变量得到开始标签名的长度,包括所述第一指针变量的值减去所述第二指针变量的值后得到的值;41-3 :根据所述第一指针变量和所述第二指针变量获取开始标签名,并将所述开始标签名和所述开始标签名的长度存入所述深度数组中深度变量的值所表示的位置;在本实施例中,获取开始标签名具体操作为提取所述第三指针变量记录的位置至第一指针变量记录的位置的内容;41-4 :判断当前读取的字节内容是否为第四符号标识,是则执行步骤41-5 ;否则执行步骤41-6 ;41-5 :将所述第二状态位的取值修改为第五预设值,返回步骤10-03 ;41-6 :将所述第一状态位的取值修改为第一预设值,并返回步骤S3 ;当所述第二状态位的取值为第五预设值时,执行操作如下42-1 :判断所述第三状态位的取值;根据不同的取值,执行相应的操作;在本实施例中,所述第三状态位的取值包括第四预设值、第六预设值、第七预设值、第八预设值;当所述第三状态位的取值为第四预设值时,执行操作如下01-01 :判断当前读取的字节内容是否为第三符号标识,是则执行步骤01-02 ;否则执行步骤01-03 ;其中,所述第三符号标识为“>”;
01-02 :将所述第一状态位的取值修改为第一预设值,并返回步骤303 ;01-03 :将所述第三状态位的取值修改为第六预设值,返回步骤403 ;
当所述第三状态位的取值为第六预设值时,执行操作如下02-01 :判断当前读取的字节内容是否为符号第五符号标识,是则执行步骤02-02 ;否则返回步骤10-03 ;其中,所述第五符号标识为“=”;02-02 :将所述第三状态位的取值修改为第七预设值,返回步骤10-03 ;当所述第三状态位的取值为第七预设值时,执行操作如下03-01 :判断当前读取的字节内容是否为第六符号标识,是则执行步骤03-02 ;否则返回步骤10-03 ;
其中,所述第六符号标识为左弓I号““ ”;03-02 :更新所述第三指针变量;在本实施例中,更新所述第三指针变量,具体为,将所述第三指针变量的值修改为所述第一指针变量加一操作后的值;03-03 :将所述第三状态位的取值修改为第八预设值,返回步骤10-03 ;当所述第三状态位的取值为第八预设值时,执行操作如下04-01 :判断当前读取的字节内容是否为第七符号标识,是则执行步骤04-02,否则返回步骤10-03 ;04-02:根据所述第一指针变量的值和第三指针变量的值获取标签属性信息;具体地,获取标签属性信息的具体操作为提取所述第三指针变量记录的位置至第一指针变量记录的位置的内容;04-03 :将所述第一状态位的取值修改为第一预设值,并返回步骤S3 ;步骤10-06 :对所述第一指针变量和所述第一深度变量恢复备份。在本实施例中,对所述第一指针变量和所述第一深度变量恢复备份,具体为将所述第二指针变量的值和所述第二深度变量的值分别赋值给第一指针变量和所述第一深度
变量;所述第二处理模块805,用于在所述第二缓存区存在未被成功解析的XML报文时,将所述第二缓存区中被成功解析的XML报文数据清除,将所述未被成功解析的XML报文数据前移,并触发所述存储模块;在所述第ニ缓存区不存在未被成功解析的XML报文,且最后一包XML报文没有全部被成功解析吋,将所述第二缓存区中的XML报文数据清除,并触发所述存储模块。 结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。 以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种处理XML报文的方法,其特征在于,包括以下步骤 ①、当满足预设条件吋,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到所述第二缓存区的XML报文数据时,将所述未被存储到所述第二缓存区的XML报文数据前移;所述第一缓存区用于存储接收到的XML报文数据; ②、对所述第二缓存区中的XML报文数据进行解析,当所述第二缓存区存在未被成功解析的XML报文吋,将所述第二缓存区中被成功解析的XML报文数据清除,将所述未被成功解析的XML报文数据前移,并返回步骤①;当所述第ニ缓存区不存在未被成功解析的XML报文,且最后一包XML报文没有全部被成功解析吋,将所述第二缓存区中的XML报文数据清除,并返回步骤①;当最后ー包XML报文全部被成功解析后,结束流程。
2.如权利要求I所述的方法,其特征在于,所述预设条件,具体为 接收到XML报文数据,并将所述XML报文数据存储到所述第一缓存区; 或者, 所述第一缓存区中的XML报文数据的长度大于或等于所述第二缓存区的剰余空间长度, 或者, 所述第一缓存区中的XML报文数据为所述最后一包XML报文的数据; 所述将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,具体为 当所述第一缓存区中的XML报文数据的长度大于或等于所述第二缓存区的剰余空间长度时,将所述第一缓存区中最先接收到的、数据长度等于所述第二缓存区的剰余空间长度的XML报文数据存储到所述第二缓存区;当所述第一缓存区中的XML报文数据的长度小于所述第二缓存区的剰余空间长度,且第一缓存区中的XML报文数据为所述最后一包XML报文的数据时,将第一缓存区中的全部XML报文数据存储到第二缓存区。
3.如权利要求I所述的方法,其特征在于,所述第二缓存区中的XML报文数据包括开始标签、标签内容和结束标签中的ー项或多项; 对所述第二缓存区中的XML报文数据进行解析,具体包括 A、将第二计数器的计数值设置为所述第二缓存区中的XML报文数据的长度,将第一状态位的取值初始化为第一预设值; B、判断所述第二计数器的计数值是否为零,如果为零,则执行步骤A;否则,执行步骤C ; C、根据第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减·1,对所述第一状态位的取值进行判断,如果所述第一状态位的取值为第一预设值,则执行步骤D ;如果所述第一状态位的取值为第二预设值,则执行步骤H ; D、判断所述当前字节数据是否为第一符号标识,如果是,则执行步骤E;否则,执行步骤F; E、将所述第一状态位的取值修改为所述第二预设值,将所述第一指针变量的取值赋值给第二指针变量,将第一深度变量的取值赋值给第二深度变量,并返回步骤B ; F、判断所述当前字节数据是否为有效的ASCII码,如果是,则执行步骤G;否则,返回步骤B; G、读取与所述当前字节数据在同一个标签内容中的其他字节数据,对所述标签内容进行处理,并在处理完毕后,返回步骤B ; H、判断所述当前字节数据是否为第二符号标识,如果是,则执行步骤I;否则,执行步骤J; I、读取与所述当前字节数据在同一个结束标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第二缓存区存储有所述结束标签的全部字节数据,则对所述结束标签进行处理,并在处理得到的结束标签名和结束标签名的长度分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度相同吋,将所述第一深度变量的取值减1,将所述第一状态位的取值修改为所述第一预设值,返回步骤B;在处理得到的结束标签名和结束标签名的长度不分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度相同时,返回错误信息;如果所述第二缓存区没有存储所述结束标签的全部字节数据,则执行步骤K ; J、将所述第一深度变量的取值加1,读取与所述当前字节数据在同一个开始标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第ニ缓存区存储有所述开始标签的全部字节数据,则对所述开始标签进行处理,并在处理完毕后,将所述第一状态位的取值修改为所述第一预设值,返回步骤B;如果所述第二缓存区没有存储所述开始标签的全部字节数据,则执行步骤K ; K、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
4.如权利要求3所述的方法,其特征在于,所述步骤J,具体包括 a、将所述第一深度变量的取值加1,将第二状态位和第三状态位的取值分别初始化为第三预设值和第四预设值; b、判断所述第二计数器的取值是否为零,如果为零,则执行步骤k;否则,执行c ; C、根据所述第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减1,对所述第二状态位的取值进行判断,如果所述第二状态位的取值为第三预设值,则执行步骤d ;如果所述第二状态位的取值为第五预设值,则执行步骤f ; d、判断所述当前字节数据是否为第三符号标识或第四符号标识,如果是,则执行步骤e;否则,返回步骤b; e、根据所述第一指针变量和所述第二指针变量,获取开始标签名和所述开始标签名的长度,根据所述第一深度变量指示的位置,将所述开始标签名和所述开始标签名的长度存储到深度数组,判断所述当前字节数据是否为所述第四符号标识,如果是,则将所述第二状态位的取值修改为所述第五预设值,并返回步骤b ;否则,将所述第一状态位的取值修改为所述第一预设值,并返回步骤B ; f、对所述第三状态位的取值进行判断,如果所述第三状态位的取值为所述第四预设值,则执行步骤g; 如果所述第三状态位的取值为第六预设值,则执行步骤h ; 如果所述第三状态位的取值为第七预设值,则执行步骤i ;如果所述第三状态位的取值为第八预设值,则执行步骤j; g、判断所述当前字节数据是否为所述第三符号标识,如果是,则将所述第一状态位的取值修改为所述第一预设值,返回步骤B ;否则,将所述第三状态位的取值修改为第六预设值,并返回步骤b; h、判断所述当前字节数据是否为所述第五符号标识,如果是,则将所述第三状态位的取值修改为第七预设值,并返回步骤b ;否则,返回步骤b ; i、判断所述当前字节数据是否为所述第六符号标识,如果是,则将所述第三状态位的取值修改为第八预设值,根据所述第一指针变量的取值设置第三指针变量,并返回步骤b ;否则,返回步骤b ; j、判断所述当前字节数据是否为所述第七符号标识,如果是,则根据所述第一指针变量和所述第三指针变量,获取标签属性信息,将所述第一状态位的取值修改为所述第一预设值,并返回步骤B ;否则,返回步骤b ; k、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
5.如权利要求3所述的方法,其特征在于,所述步骤I,具体包括 I、判断所述第二计数器的取值是否为零,如果为零,则执行步骤IV;否则,执行II ; II、根据所述第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减1,判断所述当前字节数据是否为第三符号标识,如果是,执行III ;否则,返回步骤I; III、根据所述第一指针变量和所述第二指针变量,获取结束标签名和所述结束标签名的长度,判断所述结束标签名和所述结束标签名的长度是否分别与所述深度数组中所述第一深度变量指示的位置存储的所述开始标签名和所述开始标签名的长度存储深度数组相同,如果相同,则将所述第一深度变量的取值减1,将所述第一状态位的取值修改为所述第一预设值,返回步骤B ;否则,返回错误信息; IV、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
6.如权利要求3所述的方法,其特征在于,所述步骤G,具体包括 i、将所述第一指针变量的取值赋值给第三指针变量; ii、判断所述第二计数器的取值是否为零,如果为零,则执行步骤V;否则,执行iii ; iii、判断所述当前字节数据是否为第一符号标识,如果是,则执行步骤iv;否则,返回步骤i i ; iv、将所述第一指针变量的取值减1,将所述第二计数器的取值加1,根据所述第一指针变量和所述第三指针变量,获取所述标签内容,并返回步骤B ; V、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
7.一种处理XML报文的装置,其特征在于,包括 存储模块,用于在满足预设条件时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区; 第一处理模块,用于将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到所述第二缓存区的XML报文数据时,将所述未被 存储到所述第二缓存区的XML报文数据前移;所述第一缓存区用于存储接收到的XML报文 数据;解析模块,用于对所述第二缓存区中的XML报文数据进行解析;第二处理模块,用于在所述第二缓存区存在未被成功解析的XML报文时,将所述第二 缓存区中被成功解析的XML报文数据清除,将所述未被成功解析的XML报文数据前移,并触 发所述存储模块;在所述第二缓存区不存在未被成功解析的XML报文,且最后一包XML报文 没有全部被成功解析时,将所述第二缓存区中的XML报文数据清除,并触发所述存储模块。
8.如权利要求7所述的装置,其特征在于,所述预设条件,具体为接收到XML报文数据,并将所述XML报文数据存储到所述第一缓存区;或者,所述第一缓存区中的XML报文数据的长度大于或等于所述第二缓存区的剩余空间长度,或者,所述第一缓存区中的XML报文数据为所述最后一包XML报文的数据;所述存储模块,具体用于当所述第一缓存区中的XML报文数据的长度大于或等于所述第二缓存区的剩余空间 长度时,将所述第一缓存区中最先接收到的、数据长度等于所述第二缓存区的剩余空间长 度的XML报文数据存储到所述第二缓存区;当所述第一缓存区中的XML报文数据的长度小 于所述第二缓存区的剩余空间长度,且第一缓存区中的XML报文数据为所述最后一包XML 报文的数据时,将第一缓存区中的全部XML报文数据存储到第二缓存区。
9.如权利要求7所述的装置,其特征在于,所述第二缓存区中的XML报文数据包括开始 标签、标签内容和结束标签中的一项或多项;所述解析模块,具体用于执行以下操作A、将第二计数器的计数值设置为所述第二缓存区中的XML报文数据的长度,将第一状 态位的取值初始化为第一预设值;B、判断所述第二计数器的计数值是否为零,如果为零,则执行步骤A;否则,执行步骤C ;C、根据第一指针变量的取值从所述第二缓存区中读取一个字节数据,将读取到的字节 数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减 1,对所述第一状态位的取值进行判断,如果所述第一状态位的取值为第一预设值,则执行 步骤D ;如果所述第一状态位的取值为第二预设值,则执行步骤H ;D、判断所述当前字节数据是否为第一符号标识,如果是,则执行步骤E;否则,执行步 骤F;E、将所述第一状态位的取值修改为所述第二预设值,将所述第一指针变量的取值赋值 给第二指针变量,将第一深度变量的取值赋值给第二深度变量,并返回步骤B ;F、判断所述当前字节数据是否为有效的ASCII码,如果是,则执行步骤G;否则,返回步 骤B;G、读取与所述当前字节数据在同一个标签内容中的其他字节数据,对所述标签内容进行处理,并在处理完毕后,返回步骤B ; H、判断所述当前字节数据是否为第二符号标识,如果是,则执行步骤I;否则,执行步骤J; I、读取与所述当前字节数据在同一个结束标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第二缓存区存储有所述结束标签的全部字节数据,则对所述结束标签进行处理,并在处理得到的结束标签名和结束标签名的长度分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度存储深度数组相同吋,将所述第一深度变量的取值减1,将所述第一状态位的取值修改为所述第一预设值,返回步骤B;在处理得到的结束标签名和结束标签名的长度不分别与深度数组中所述第一深度变量指示的位置存储的开始标签名和所述开始标签名的长度存储深度数组相同时,返回错误信息;如果所述第二缓存区没有存储所述结束标签的全部字节数据,则执行步骤K; J、将所述第一深度变量的取值加1,读取与所述当前字节数据在同一个开始标签中的其他字节数据,将所述第二计数器的计数值减去所述其他字节数据的字节数,如果所述第ニ缓存区存储有所述开始标签的全部字节数据,则对所述开始标签进行处理,并在处理完毕后,将所述第一状态位的取值修改为所述第一预设值,返回步骤B;如果所述第二缓存区没有存储所述开始标签的全部字节数据,则执行步骤K ; K、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
10.如权利要求9所述的装置,其特征在于,所述步骤J,具体包括 a、将所述第一深度变量的取值加1,将第二状态位和第三状态位的取值分别初始化为第三预设值和第四预设值; b、判断所述第二计数器的取值是否为零,如果为零,则执行步骤k;否则,执行c ; C、根据所述第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减1,对所述第二状态位的取值进行判断,如果所述第二状态位的取值为第三预设值,则执行步骤d ;如果所述第二状态位的取值为第五预设值,则执行步骤f ; d、判断所述当前字节数据是否为第三符号标识或第四符号标识,如果是,则执行步骤e;否则,返回步骤b; e、根据所述第一指针变量和所述第二指针变量,获取开始标签名和所述开始标签名的长度,根据所述第一深度变量指示的位置,将所述开始标签名和所述开始标签名的长度存储到深度数组,判断所述当前字节数据是否为所述第四符号标识,如果是,则将所述第二状态位的取值修改为所述第五预设值,并返回步骤b ;否则,将所述第一状态位的取值修改为所述第一预设值,并返回步骤B ; f、对所述第三状态位的取值进行判断,如果所述第三状态位的取值为所述第四预设值,则执行步骤g; 如果所述第三状态位的取值为第六预设值,则执行步骤h ; 如果所述第三状态位的取值为第七预设值,则执行步骤i ; 如果所述第三状态位的取值为第八预设值,则执行步骤j ;g、判断所述当前字节数据是否为所述第三符号标识,如果是,则将所述第一状态位的取值修改为所述第一预设值,返回步骤B ;否则,将所述第三状态位的取值修改为第六预设值,并返回步骤b; h、判断所述当前字节数据是否为所述第五符号标识,如果是,则将所述第三状态位的取值修改为第七预设值,并返回步骤b ;否则,返回步骤b ; i、判断所述当前字节数据是否为所述第六符号标识,如果是,则将所述第三状态位的取值修改为第八预设值,根据所述第一指针变量的取值设置第三指针变量,并返回步骤b ;否则,返回步骤b ; j、判断所述当前字节数据是否为所述第七符号标识,如果是,则根据所述第一指针变量和所述第三指针变量,获取标签属性信息,将所述第一状态位的取值修改为所述第一预设值,并返回步骤B ;否则,返回步骤b ; k、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
11.如权利要求9所述的装置,其特征在于,所述步骤I,具体包括 I、判断所述第二计数器的取值是否为零,如果为零,则执行步骤IV;否则,执行II ; II、根据所述第一指针变量的取值从所述第二缓存区中读取ー个字节数据,将读取到的字节数据作为当前字节数据,将所述第一指针变量的取值加1,将所述第二计数器的计数值减1,判断所述当前字节数据是否为第三符号标识,如果是,执行III ;否则,返回步骤I ; III、根据所述第一指针变量和所述第二指针变量,获取结束标签名和所述结束标签名的长度,判断所述结束标签名和所述结束标签名的长度是否分别与所述深度数组中所述第一深度变量指示的位置存储的所述开始标签名和所述开始标签名的长度存储深度数组相同,如果相同,则将所述第一深度变量的取值减1,将所述第一状态位的取值修改为所述第一预设值,返回步骤B ;否则,返回错误信息; IV、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
12.如权利要求9所述的装置,其特征在于,所述步骤G,具体包括 i、将所述第一指针变量的取值赋值给第三指针变量; ii、判断所述第二计数器的取值是否为零,如果为零,则执行步骤V;否则,执行iii ; iii、判断所述当前字节数据是否为第一符号标识,如果是,则执行步骤iv;否则,返回步骤ii ; iv、将所述第一指针变量的取值减1,将所述第二计数器的取值加1,根据所述第一指针变量和所述第三指针变量,获取所述标签内容,并返回步骤B ; V、将所述第二指针变量的取值赋值给第一指针变量,将所述第二深度变量的取值赋值给所述第一深度变量。
全文摘要
本发明公开一种处理XML报文的方法和装置,属于数据通信领域,该方法包括以下步骤在满足预设条件时,将第一缓存区中的部分或全部XML报文数据存储到第二缓存区,将所述第一缓存区中被存储到所述第二缓存区的XML报文数据清除,当所述第一缓存区中存在未被存储到第二缓存区的XML报文数据时,将所述未被存储到第二缓存区的XML报文数据前移;对第二缓存区中的XML报文数据进行解析。本发明通过设置第一缓存区和第二缓存区,能够分批接收、分批解析XML报文数据,有效地解决了批量XML报文不能被完整解析的问题。
文档编号H04L12/56GK102647351SQ20121009622
公开日2012年8月22日 申请日期2012年4月1日 优先权日2012年4月1日
发明者于华章, 陆舟 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1