发明内容
为解决上述技术问题,本发明实施例提供了一种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文档中描述某类产品,可定义产品标签为“手机”,还可以定义该标签的属性,例如“品牌”属性、“型号”属性、“价格”属性、“颜色”属性等。每一个属性字段可以有具体的属性值,例如“品牌”属性的值为“三星”,“型号”属性的值为“I9000”,“价格”属性的值为“3000”,“颜色”属性的值为“黑色”等。对XML解析的过程,即是要获取每个标签(节点)对应的值以及标签(节点)的属性、属性对应的值。
在现有技术中,通用的解析方法是SAX和DOM。但无论是SAX还是DOM,都需要对每个请求的XML报文进行单独的解析。而在复杂的业务逻辑中,会定义多个接口用于传输、交换数据,而接口不同,XML报文的数据结构也会不同,相应的请求参数也会不同。因此,对于不同的接口,需要编制不同的解析程序对XML报文进行解析,才能获取需要的数据以进行后续的业务处理。这样,随着业务逻辑的扩展,业务接口也越来越多,解析程序的代码量也会呈膨胀式增长,不易维护。而每增加或修改接口,都需要增加或修改解析程序代码,解析程序的可扩展性、通用性不强。
为了解决现有技术的上述问题,本发明实施例提供了一种XML报文处理方法和装置,可以提供一种通用、扩展性强、易于维护的XML报文解析方法。由于现有技术中不同接口对应的报文数据结构是不同的,包含的报文字段(节点)也是不同的,因此需要不同的解析程序对其进行解析。在本发明实施例中,抽象、提炼出了通用的解析程序,而针对变化的部分即不同接口定义的不同字段(节点),采用保存节点配置信息的方式保存接口包含的节点信息,并为每个接口赋予唯一的接口标识用以区分不同接口,并根据接口标识获取与接口对应的节点配置信息,根据所述节点配置信息使用通用的XML解析程序进行解析。这样,即可以针对不同接口的报文提供通用的解析方法,易于维护,可扩展性强。
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
参见图1,为本发明实施例提供的XML报文处理方法第一实施例流程图,包括:
S101,接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
本发明实施例提供的方法可以应用于业务处理***中用于解析XML报文或XML文档,也可以单独适用。通常,在XML报文发送方与XML报文接收方或业务调用方与业务提供方之间会约定一个接口协议,用于定义接口所包含的字段(节点)、数据的结构、格式等信息,双方通过约定的接口信息进行数据交互。在本发明实施例中,为每一个接口提供一个唯一的标识,用于区分不同的接口。在发送的XML报文中包含接口标识,接收方在接收XML报文后,即通过解析XML报文获取接口标识。
S102,根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
在本发明实施例中,预先保存了接口的节点配置信息。接口的节点配置信息可以以配置文件的形式保存,也可以保存在数据库中。由于接口协议由业务调用方和业务提供方共同约定,一般不会轻易修改,为了提高***的处理性能,可以将节点配置信息保存在缓存中,这样无需每次均从数据库中读取节点配置信息,提高了***处理性能。
在本发明实施例中,预先保存了接口标识与节点配置信息的对应关系,根据所述对应关系,即可以获取与接口标识对应的节点配置信息。
S103,根据所述节点配置信息对所述XML报文进行解析。
对XML报文进行解析的过程,即是根据节点配置信息对所述XML报文中的各节点逐项进行解析,获取各节点对应的值的过程。如果节点还有属性,相应地,获取节点的属性对应的值。优选的,以键值对的形式输出解析结果。其中,以节点名称为键、节点的值为值组成键值对输出。如果节点还有属性,进一步包括以属性为键、以属性的值为值组成另一组键值对输出。
优选的,当修改接口定义时,更新与所述接口对应的节点配置信息。在本发明实施例中,当业务提供方和业务调用方对接口定义进行修改时,如增加、修改或删除字段(节点)时,更新与所述接口对应的节点配置信息,即增加、修改或删除相应的节点对应的配置信息。这样,无需改动XML处理程序即可对修改后的接口对应的XML报文进行解析。本发明实施例提供的方法对于有大量业务接口的***来说,增加了***的灵活性。每次对接口的修改,无需程序员修改代码来编制专门的解析程序,大大降低了维护成本。
参见图2,为本发明实施例提供的XML报文处理方法第二实施例流程图,包括:
S201,接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
S202,根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
在本发明实施例中,预先保存了接口的节点配置信息。接口的节点配置信息可以以配置文件的形式保存,也可以保存在数据库中。由于接口协议由业务调用方和业务提供方共同约定,一般不会轻易修改,为了提高***的处理性能,可以将节点配置信息保存在缓存中,这样无需每次均从数据库中读取节点配置信息,提高了***处理性能。对应同一接口标识的节点配置信息可以保存在一起,也可以分开保存。各条节点配置信息可以按照顺序信息顺序存储,也可以随机进行存储。本发明对此不进行限定。
在本发明第二实施例中,节点配置信息可以包括:
(1)接口标识(XMLID),节点对应的接口的唯一标识;
(2)报文节点名称(XMLNames),对应请求的XML报文节点的名称。
(3)输出节点名称(DataNames),对应对XML报文解析后存放XML的值的节点名称。
(4)父节点名称(ParentName),此节点的上一级父节点的名称。
(5)子节点信息,用于表示当前节点是否有子节点。具体的,可以用1表示有,用0表示没有。当然也可以用其他数值或标识进行表示。
(6)属性信息,用于表示当前节点是否有属性。具体的,可以用1表示有,用0表示没有。当然也可以用其他数值或标识进行表示。
(7)必要性信息,用于表示此节点是否为必须存在的必要节点。具体的,可以用1表示有,用0表示没有。当然也可以用其他数值或标识进行表示。
(8)顺序信息,用于表示此节点在XML报文中出现的顺序。顺序1对应的节点一般为根节点。
(9)业务标识。进一步的,也可以包括此节点对应的业务标识。
如表1所示,为一段XML报文的示例。
表1XML报文示例
以表1所示报文为例,假设所示报文对应的接口的接口标识为01,与这一接口对应的节点配置信息如表2所示。
表2节点配置信息示例
在这一步骤中,当获取到报文的接口标识后,即取出与所述接口标识对应的节点配置信息。具体到上述示例,即取出接口标识为01的9条配置信息。
S203,根据所述节点配置信息,选取一个未处理节点作为当前节点。
具体的,可以根据获取的与接口标识对应的节点配置信息,任意选取其中一条配置信息对应的节点作为当前节点。优选的,可以将第一条配置信息对应的节点作为当前节点。
S204,获取当前节点的配置信息。
S205,根据当前节点的配置信息判断当前节点是否有属性;如果有,进入步骤S206,如果无,进入步骤S207。
S206,获取所述属性对应的值,进入步骤S207。
具体的,前面提到,XML报文一般由标签组成,一般有开始标签和结束标签。下面是几种XML报文格式的示例:
1、<a>value</a>
2、<a/>
3、<a property=”value2”>value1</a>
在第一种格式中,开始标签<a>和结束标签</a>中的字符串(value)即节点的值。在第二种格式中,不存在节点的值。在第三种格式中,节点具有属性property,双引号中的字符串为属性对应的值。这时,当***判断当前节点有属性时,即可以获取这一字符串作为属性对应的值。
以表1所述报文为例,假设当前节点为address,通过address对应的节点配置信息,***判断address具有属性,这时从报文中的<address class=“A”>nanshan</address>中获取属性class对应的值A。这时,以属性为键,以属性的值组成键值对进行保存。
S207,判断当前节点是否有子节点。如果有,获取子节点的配置信息,将子节点作为当前节点,进入步骤S204。如果当前节点有多个子节点,从所述子节点中选取一个子节点作为当前节点,进入步骤S204。处理完当前节点的其中一个子节点后,再递归处理当前节点的其他子节点。
S208,如果判断当前节点没有子节点,则获取当前节点的值。
前面提到,XML报文一般有开始标签和结束标签,开始标签<a>和结束标签</a>中的字符串(value)即节点的值。以表1所述报文为例,假设当前处理节点为XMLid,这时从报文<xmlid>01</xmlid>中取出开始标签和结束标签之间的值01作为当前节点xmlid的值。这时,以输出节点名称为键,以当前节点的值为值组成键值对进行保存。这里,输出节点名称可以与报文节点名称相同,也可以不同。XML报文可能存在报文节点名称相同,但取出的值不同的情况,即一个报文节点对应多个值。为了进行区分,可以定义输出节点名称,以区分具有不同值的相同报文节点。
S209,判断当前节点是否为最后一个节点,如果否,进入步骤S203,选取一个未处理的节点,将所述节点作为当前节点进行处理,直至处理完最后一个节点。
如果还存在未处理的节点,则存在未处理的节点配置信息,则选取一条未处理的配置信息对应的节点作为当前节点,重复步骤S203至S207的处理过程,直至最后一个节点处理完毕。
S210,输出解析结果。
以输出节点名称为键、节点值为值组成键值对,输出各节点对应的键值对信息。如果节点有属性,进一步输出以属性为键、属性值为值组成的键值对信息。
进一步的,在步骤S208判断当前节点没有子节点,在获取当前节点的值之前,进一步包括判断当前节点是否为必要节点的步骤。如果判断结果为是,判断所述XML报文是否包含所述节点;如果所述XML报文中包含所述节点,则进入获取当前节点的值的步骤;如果否,返回错误信息。
在本发明第二实施例中,通过获取报文的接口标识以获取与所述接口标识对应的节点配置信息,并根据所述节点配置信息选取一个节点作为当前节点,判断当前节点是否有属性,如果有属性,获取属性值;如果无,则进一步判断当前节点是否有子节点,如果有,则对子节点进行解析处理。这样,遍历所有节点进行解析,并输出解析结果。由于本发明第二实施例中,选取当前节点进行解析时,可以从任意一条配置信息开始解析,因此方法灵活,便于应用,提高了解析的效率。
参见图3,为本发明实施例提供的XML报文处理方法第三实施例流程图,包括:
S301,接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
S302,根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
在这一步骤中,当获取到报文的接口标识后,即取出与所述接口标识对应的节点配置信息。具体到表1中的示例,即取出接口标识为01的9条配置信息。
S303,根据所述节点配置信息,获取根节点,将所述根节点作为当前节点。
在本发明第三实施例中,在根据所述节点配置信息选取一个节点作为当前节点时,是优先选取根节点作为第一个处理的节点。这样可以从根节点起遍历所有节点进行解析处理,可以优化处理流程。
具体的,获取根节点的方式,可以根据节点配置信息中父节点名称信息,获取父节点名称为无(null)对应的节点作为根节点。可选的,也可以在节点配置信息中设置一个标识用于标识根节点,然后根据该标识获取根节点对应的配置信息。
S304,获取当前节点的配置信息。
S305,根据当前节点的配置信息判断当前节点是否有属性;如果有,进入步骤S306,如果无,进入步骤S307。
S306,获取所述属性对应的值,进入步骤S307。
S307,判断当前节点是否有子节点。如果有,获取子节点的配置信息,将子节点作为当前节点,进入步骤S304。如果当前节点有多个子节点,从所述子节点中选取一个子节点作为当前节点,进入步骤S304。处理完当前节点的其中一个子节点后,再递归处理当前节点的其他子节点。
S308,如果判断当前节点没有子节点,判断当前节点是否为必要节点。如果判断结果为是,进入步骤S309;如果判断结果为否,进入步骤S310。
S309,判断所述XML报文是否包含所述节点,如果是,进入步骤S310;如果否,返回错误信息。进入步骤S311。
S310,获取当前节点的值。
S311,判断当前节点是否为最后一个节点,如果否,进入步骤S312。如果是,进入步骤S313。
S312,选取一个未处理的节点,将所述节点作为当前节点进行处理,进入步骤S304,直至处理完最后一个节点。
一般而言,如果从根节点开始处理,逐项处理根节点下的各项子节点,即可遍历所有节点。可选的,在本发明第三实施例中,还进一步包括步骤S311即判断当前节点是否为最后一个节点的步骤。如果还存在未处理的节点,则存在未处理的节点配置信息,则选取一条未处理的配置信息对应的节点作为当前节点,重复步骤S304至S310的处理过程,直至最后一个节点处理完毕。
S313,输出解析结果。
以输出节点名称为键、节点值为值组成键值对,输出各节点对应的键值对信息。如果节点有属性,进一步输出以属性为键、属性值为值组成的键值对信息。
在本发明第三实施例中,通过获取报文的接口标识以获取与所述接口标识对应的节点配置信息,并根据所述节点配置信息选取根节点作为当前节点,判断当前节点是否有属性,如果有属性,获取属性值;如果无,则进一步判断当前节点是否有子节点,如果有,则对子节点进行解析处理。这样,从根节点触发遍历所有节点进行解析,并输出解析结果。由于本发明第三实施例中,选取当前节点进行解析时,从根节点开始进行解析,遍历各个节点,因此可以提高解析的效率。
参见图4,为本发明实施例提供的XML报文处理方法第四实施例流程图。
在XML报文中,父节点有可能有属性信息,也可能没有属性信息。对于在接口协议中约定父节点没有属性信息的一类报文来说,还可以采取本发明第四实施例所示的方法进行处理。
S401,接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
S402,根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
在这一步骤中,当获取到报文的接口标识后,即取出与所述接口标识对应的节点配置信息。具体到表1中的示例,即取出接口标识为01的9条配置信息。
S403,根据所述节点配置信息,选取一个节点作为当前节点。
在本发明第四实施例中,选取一个节点作为当前节点既可以为选取根节点作为当前节点,也可以选取第一条配置信息对应的节点作为当前节点,也可以选取任意一条配置信息对应的节点作为当前节点。
S404,获取当前节点的配置信息。
S405,根据当前节点的配置信息判断当前节点是否有子节点,如果有,获取子节点的配置信息,将子节点作为当前节点,进入步骤S404。如果当前节点有多个子节点,从所述子节点中选取一个子节点作为当前节点,进入步骤S404。处理完当前节点的其中一个子节点后,再递归处理当前节点的其他子节点。
S406,如果判断当前节点没有子节点,进一步判断当前节点是否有属性;如果有,进入步骤S407,如果无,进入步骤S408。
S407,获取所述属性对应的值,进入步骤S408。
S408,判断当前节点是否为必要节点。如果判断结果为是,进入步骤S409;如果判断结果为否,进入步骤S410。
S409,判断所述XML报文是否包含所述节点,如果是,进入步骤S410;如果否,返回错误信息。进入步骤S411。
S410,获取当前节点的值。
S411,判断当前节点是否为最后一个节点,如果否,进入步骤S412;如果是,进入步骤S413。
S412,选取一个未处理的节点,将所述节点作为当前节点进行处理进入步骤S404,直至处理完最后一个节点。
S413,输出解析结果。
以输出节点名称为键、节点值为值组成键值对,输出各节点对应的键值对信息。如果节点有属性,进一步输出以属性为键、属性值为值组成的键值对信息。
在本发明第四实施例中,与第二实施例和第三实施例不同的是,获取当前节点后,即先判断当前节点是否有子节点,再判断当前节点是否有属性,对于父节点没有属性的一类报文来说,省去了判断父节点是否有属性的步骤,进一步优化了处理流程,提高了报文解析效率。
参见图5,为本发明实施例提供的XML报文处理方法第五实施例流程图。
前面提到,节点配置信息中可以包括顺序信息,用于表示此节点在XML报文中出现的顺序。顺序1对应的节点一般为根节点。如表2所述,用1-9标识XML报文各节点出现的顺序。在本发明第五实施例中,我们可以按照节点在报文中出现的顺序逐项解析各节点。
S501,接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
S502,根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
这时,可以取出与所述接口标识对应的所有节点配置信息,也可以仅取出处于第一顺序的节点配置信息,一般为根节点对应的配置信息。
S503,根据所述节点配置信息中的顺序信息获取处于第一顺序的配置信息对应的节点,将所述节点作为当前节点。
S504,获取当前节点的配置信息。
S505,根据当前节点的配置信息判断当前节点是否有属性。如果有,进入步骤S506,如果无,进入步骤S507。
S506,获取所述属性对应的值,进入步骤S507。
S507,获取当前节点的值。
可选的,在进入步骤S507之前,还可以进一步包括判断当前节点是否必要节点的步骤。如果判断结果为是,判断所述XML报文是否包含所述节点;如果所述XML报文中包含所述节点,则进入步骤S507;如果否,返回错误信息。
S508,判断当前节点是否为最后一个节点,如果否,进入步骤509;如果是,进入步骤S510。
S509,按照所述顺序信息对应的顺序处理下一条配置信息对应的节点,将其作为当前节点进行处理,重复步骤S504至S507的处理步骤,直至处理完所有节点。
S510,输出解析结果。
以输出节点名称为键、节点值为值组成键值对,输出各节点对应的键值对信息。如果节点有属性,进一步输出以属性为键、属性值为值组成的键值对信息。
在本发明第五实施例中,利用节点配置信息中的节点顺序信息,按照所述顺序逐项对节点进行解析,省去了判断节点是否有子节点的步骤,进一步优化了处理流程,提高了解析效率。
参见图6,为本发明实施例提供的XML报文处理装置示意图。
所述装置包括:
接收模块601,用于接收XML报文,根据所述XML报文获取接口标识,所述接口标识为接口的唯一标识。
获取模块602,用于根据预存的所述接口标识与节点配置信息的对应关系获取与所述接口标识对应的节点配置信息。
解析模块元603,用于根据所述节点配置信息对所述XML报文进行解析。
优选的,所述解析模块还用于根据所述节点配置信息对所述XML报文中的各节点逐项进行解析,获取各节点对应的值。
在本发明一个实施例中,所述解析模块具体为第一解析模块,用于根据所述节点配置信息中的顺序信息获取处于第一顺序的配置信息对应的节点,将所述节点作为当前节点;获取当前节点的配置信息;根据当前节点的配置信息判断当前节点是否有属性;如果判断当前节点无属性,直接获取当前节点的值;如果判断当前节点有属性,获取所述当前节点的属性对应的值以及当前节点的值;按照所述顺序信息对应的顺序处理下一条配置信息对应的节点,将其作为当前节点进行处理,直至处理完所有节点。
具体的,所述第一解析模块包括:
第一获取单元,用于根据所述节点配置信息中的顺序信息获取处于第一顺序的配置信息对应的节点,将所述节点作为当前节点。
第二获取单元,用于获取当前节点的配置信息。
第一判断单元,用于根据当前节点的配置信息判断当前节点是否有属性。当判断结果为否时,进入第三获取单元。
第三获取单元,用于接收第一判断单元的判断结果,当判断结果为是时,获取当前节点的属性对应的值;进入第四获取单元。
第四获取单元,用于获取当前节点的值。
第二判断单元,用于判断当前节点是否最后一个节点,如果否,按照所述顺序信息对应的顺序处理下一条配置信息对应的节点,将其作为当前节点进入第一获取单元,直至处理完最后一个节点。
在本发明另一实施例中,所述解析模块具体为第二解析模块,用于根据所述节点配置信息,选取一个节点作为当前节点;获取当前节点的配置信息;根据当前节点的配置信息判断当前节点是否有属性,如果有,获取属性对应的值并进入判断当前节点是否有子节点的步骤;如果判断当前节点无属性,则判断当前节点是否有子节点,如果有,获取所述子节点的配置信息,将子节点作为当前节点,进入获取当前节点的配置信息的步骤;如果判断当前节点没有子节点,获取当前节点的值;判断当前节点是否为最后一个节点,如果否,选取一个未处理的节点,将所述节点作为当前节点进行处理,直至处理完最后一个节点。
第二解析模块具体可以包括:
第五获取单元,用于根据所述节点配置信息,选取一个节点作为当前节点。
第六获取单元,用于获取当前节点的配置信息。
第三判断单元,用于根据当前节点的配置信息判断当前节点是否有属性。当判断结果为否时,进入第四判断单元。
第七获取单元,用于接收第三判断单元的判断结果,当判断结果为是时,获取属性对应的值,进入第四判断单元。
第四判断单元,用于判断当前节点是否有子节点。
第八获取单元,用于接收第四判断单元的判断结果,当判断结果为是时,将子节点作为当前节点,进入第六获取单元。
第九获取单元,用于接收第四判断单元的判断结果,当判断结果为否时,获取当前节点的值。
第五判断单元,用于判断当前节点是否为最后一个节点,如果否,选取一个未处理的节点,将所述节点作为当前节点进入第六获取单元,直至处理完最后一个节点。
在本发明另一实施例中,所述解析模块具体为第三解析模块,用于根据所述节点配置信息,选取一个节点作为当前节点;获取当前节点的配置信息;根据当前节点的配置信息判断当前节点是否有子节点,如果有,将子节点作为当前节点,进入获取当前节点的配置信息的步骤;如果无,判断当前节点是否有属性;如果判断当前节点无属性,获取当前节点的值;如果有,获取当前属性对应的值以及当前节点的值;判断当前节点是否为最后一个节点,如果否,选取一个未处理的节点作为当前节点进行处理,直至处理完最后一个节点。
所述第三解析模块具体可以包括:
第十获取单元,用于根据所述节点配置信息,选取一个节点作为当前节点。
第十一获取单元,用户获取当前节点的配置信息。
第六判断单元,用于根据当前节点的配置信息判断当前节点有子节点。
第十二获取单元,用于接收第六判断单元的判断结果,当判断结果为是时,将子节点作为当前节点,进入第十一获取单元。
第七判断单元,用于接收第四判断单元的判断结果,当判断结果为否时,判断当前节点是否有属性。如果否,进入第十四获取单元。
第十三获取单元,用于接收第七判断单元的判断结果,当判断结果为是时,获取属性对应的值,进入第十四获取单元。
第十四获取单元,用于获取当前节点的值。
第八判断单元,用于判断当前节点是否为最后一个节点,如果否,选取一个未处理的节点,将所述节点作为当前节点进入第十一获取单元,直至处理完最后一个节点。
具体的,所述装置还包括:
输出模块,用于以键值对的形式输出解析结果,其中以节点名称为键、节点的值为值组成键值对。
具体的,所述装置还包括:
更新模块,用于当修改接口定义时,更新与所述接口对应的节点配置信息。在本发明实施例中,当业务提供方和业务调用方对接口定义进行修改时,如增加、修改或删除字段(节点)时,更新模块即更新与所述接口对应的节点配置信息,即增加、修改或删除相应的节点对应的配置信息。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。