XML数据结构转换方法和装置与流程

文档序号:15686784发布日期:2018-10-16 21:08阅读:185来源:国知局

本发明涉及数据处理领域,特别涉及一种xml数据结构转换方法和装置。



背景技术:

可扩展标记语言(extensiblemarkuplanguage,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数据结构发生变化,则只需要重新选择对应的数据结构转换规则来进行转换即可,不需要重新编写代码,提高了项目开发效率、可靠性和扩展性,同时提高了代码的可读性、可移植性和可维护性。同时,由于可以设置多种不同数据结构之间的转换规则,使得该方法能够适用于多种不同数据结构直接的转换,应用范围广。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种xml数据结构转换方法的流程图;

图2是本发明实施例提供的一种xml数据结构转换装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

图1是本发明实施例提供的一种xml数据结构转换方法的流程图,该xml数据结构转换方法既可以适用于xml解码,也可以适用于xml编码,参见图1,所述方法包括:

步骤101:获取待转换的xml数据结构。

在本发明实施例中,xml数据结构是内存地址中程序可读写的存储数据。

在xml解码过程中,步骤101可以包括:接收xml报文或者xml文档;对所述xml报文或者xml文档进行解析,得到待转换的xml数据结构。

以xml文档为例,xml文档实际上就是纯文本数据,使用xml数据格式的应用程序首先必须能对xml数据进行读取、分析,进而进行处理。目前常见的xml解析方案包括xml简单应用程序编程接口(simpleapisforxml,sax)与文档对象模型(documentobjectmodel,dom)两种。其中,dom实现了万维网联盟(worldwidewebconsortium,w3c)标准,有多种编程语言支持这种解析方式。其处理方式是将整个xml报文或者xml文档作为类似树结构的方式读入内存中以进行解析。sax通过类似于流解析的技术,是一种不可逆的解析过程,能够对xml报文或者xml文档的部分进行解析。

在xml编码过程中,步骤101可以包括:直接获取待编码的xml数据结构即为待转换的xml数据结构。

本发明提供的xml数据结构转换方法由客户端或者服务器执行,执行该方法的客户端或者服务器中内置有sax或dom解析接口、数据结构转换规则、执行该方法的程序代码以及数据库等。

客户端或者服务器通过sax或dom解析接口对xml报文或者xml文档进行解析,然后执行程序代码按照数据结构转换规则对xml数据结构进行转换,转换过程中将从xml报文或者xml文档中得到的数据存入数据库,同时通过使用xml数据格式的应用程序显示转换后的xml数据结构的内容。

步骤102:从预设的数据结构转换规则中选择第一数据结构转换规则,所述第一数据结构转换规则与所述待转换的xml数据结构相对应。

在本发明实施例中,客户端或者服务器中可以实现预设多个数据结构转换规则,使用时,既可以由工作人员手动选取,也可以由客户端或者服务器自动选取。

手动选取时,步骤102可以包括:接收用户输入指令;根据用户输入指令选择对应的数据结构转换规则作为第一数据结构转换规则。

例如,客户端或者服务器中的多个数据结构转换规则,每个都有一个对应的编号,用户输入指令中携带相应数据结构转换规则的编号,从而实现数据结构转换规则的选取。

自动选取时,步骤102可以包括::

第一步,将所述待转换的xml数据结构中的关键字段,依次与所述预设的数据结构转换规则中的关键字进行匹配。

在本发明实施例中,xml数据结构中的哪些部分属于关键字段已经预先定义。第一步具体可以包括:先确定所述待转换的xml数据结构中包括的关键字段,然后采用这些关键字段与各个数据结构转换规则的关键字进行匹配。

例如,一段描述某装置所处当前状态的xml数据结构如下:<devstatusdev=astatus=b/>,在这段数据结构中所包括的关键字段可以为devstatusdev。

为了便于进行数据结构转换规则选取,可以事先预设一个索引表,该索引表包括数据结构转换规则的编号和关键字段的对应关系。这样,只需要在索引表中查找关键字段(相当于与所述预设的数据结构转换规则中的关键字匹配),即可选出对应的数据结构转换规则。

第二步,选取匹配成功的数据结构转换规则作为所述第一数据结构转换规则,所述匹配成功的数据结构转换规则的关键字与所述待转换的xml数据结构中的各个关键字段完全匹配。

当然,除了手动选取和自动选取两种方式外,还可以包括手动和自动相结合的方式。例如,在采用自动选取时,系统选择出多个数据结构转换规则,此时可以接收用户选择指令,根据用户选择指令从这多个数据结构转换规则中选出第一数据结构转换规则。例如,根据系统匹配选择出规则a和b,规则a和规则b对应的输入数据结构相同,不同之处在于输出的数据结构不同,通过用户选择指令可以进一步选择其中一个用于后续转换。

下面先介绍本发明实施例中的数据结构转换规则,从而方便对第二步中的匹配进行解释。

在本发明实施例中,所述数据转换规则可以包括转换规则表。其中,所述转换规则表,用于定义xml数据结构转换前和转换后各个字段的属性。

具体地,所述字段的属性包括字段标识(id)、字段父节点标识(pid)、字段名称(name)、字段类型(type)、存储过程名称(proc)、默认值(default)和取值路径(src)。

下面通过表1对上述字段的属性(下称字段属性)进行说明:

字段属性名称包括字段属性英文名,除了字段属性英文名外还可以包括字段属性中文名;字段属性类型包括number(10)、varchar2(100char),其中number(10)为数值型,长度为10,varchar2(100char)为字符串型,长度为100个任意字符;字段属性说明用于进行字段的各个属性解释。

表1

其中,字段标识为数据结构中各个字段对应的标识;字段父节点标识用于指示数据结构中各个字段之间的关系,例如字段dev的pid为2,则说明字段dev的父节点的id为2,也即字段dev的父节点为字段devstatus,客户端或者服务器通过父节点标识能够确定各个字段间的从属关系;字段名称为各个字段的名称,字段的名称也即数据结构中的字段;字段类型包括xml_in、node、attr、proc、xml_out、text、textvalue等,各个类型的含义参见转换规则数据库表;存储过程名称表示所引用的数据库中的存储过程;对于默认值,如果类型为node、text或novalue,则是默认元素重复次数,如果类型为attr或者textvalue,则表示该字段为一个固定值;取值路径表示textvalue字段的取值路径。

下面表2-表4是具体的转换规则表的示例:

表2

表3

表4

在本发明实施例中,不同的数据转换规则实际就是转换规则表不同,表2、表3和表4分别对应一种数据转换规则。

进一步地,本发明实施例提供的方法还可以包括:接收用户输入,根据用户输入新建、修改或删除所述数据转换规则中的转换规则表。通过该步骤对数据转换规则进行调整,以适应xml转换需求。

步骤103:按照所述第一数据结构转换规则对所述待转换的xml数据结构进行转换。

具体地,步骤103可以包括:根据第一数据结构转换规则中的输出数据结构根元素类型下的各个字段生成输出数据结构;根据待转换的xml数据结构获取其中的参数值写入输出数据结构,完成数据结构转换。

进一步地,当待转换的xml数据结构包括两个或多个数据结构时,该方法还可以包括:先对待转换的xml数据结构进行拆分,然后分别对两个或多个数据结构进行转换。例如,可以根据待转换的xml数据结构中节点类型的字段(如devstatus)进行拆分。当然,进行xml数据结构拆分为可选步骤。

在xml编码过程中,完成待转换的xml数据结构的结构转换后,可以对转换后的xml数据结构进行进一步地处理,例如根据转换后的xml数据结构生成xml报文或者xml文档。

进一步地,在转换过程中,如果转换规则中指定有存储过程(存储过程名称)时,则调用该存储过程将待转换的xml数据结构中的数据存入数据库(从而实现存储、查询操作),该调用过程可以采用java数据库连接(javadatabaseconnectivity,jdbc)实现。

下面通过举例对步骤103进行举例说明,包括三种场景:

场景一:一对一的数据结构之间的转换;场景二:一对二的数据结构之间的转换;场景三:带有数据查询和存储需求的转换。

场景一:一份描述某装置所处当前状态的xml数据结构,如下:

<devstatusdev=astatus=b/>

程序代码调用表2转换规则表,参见表2可知,输入数据结构中,根元素为devstatus,且dev与status为devstatus元素的属性;输出数据结构中,根元素为root,dev与status为root的子元素并且含有文本,且dev与status根据default描述都只会重复一次,dev的文本取值根据src描述的xm_in&devstatus&dev,表明dev取自输入数据结构下devstatus元素的dev属性,status的文本取值根据src描述的xm_in&devstatus&status,表明status取自输入数据结构下devstatus元素的status属性。根据该规则转后的数据结构转为:

场景二:一份含有多个装置所处当前状态的xml数据结构,如下:

如前所述,在进行转换前,需要对xml数据结构进行拆分,拆分后得到如下两个xml数据结构:

<devstatus>

<devstatusdevid=a1status=b1/>

</devstatus>

<devstatus>

<devstatusdevid=a2status=b2/>

</devstatus>

程序代码调用表3转换规则表,参见表3可知,在表2的基础上,表3的转换规则配置只是增加了xml_in的src,用来描述在做数据结构转换之前,将输入数据结构根据devstatus元素进行拆分。根据该规则转后的数据结构转为:

场景三:假设收到一份描述某装置所处当前状态的xml数据结构,要求将状态值存入数据库,同时按照场景一的要求对数据结构进行转换。

程序代码调用表4转换规则表,参见表4可知,在表2的基础上,表4的转换规则配置增加了devstatus的proc,以及两个proc类型的子元素v_dev与v_status。v_dev的src描述了该值取自输入数据结构下devstatus元素的dev属性,v_status的src描述了该值取自输入数据结构下devstatus元素的status属性,然后将v_dev与v_status注入到devstatus的proc—procedure_to_save_devstatus中,调用存储过程,完成了数据的存储,数据的查询亦相同。

本发明实施例通过选取与待转换的xml数据结构对应的数据结构转换规则来对数据结构进行转换,如果需要转换的xml数据结构发生变化,则只需要重新选择对应的数据结构转换规则来进行转换即可,不需要重新编写代码,提高了项目开发效率、可靠性和扩展性,同时提高了代码的可读性、可移植性和可维护性。同时,由于可以设置多种不同数据结构之间的转换规则,使得该方法能够适用于多种不同数据结构直接的转换,应用范围广。另外,就实现而言,基于数据库配置xml转换规则能够避免使用传统系统接口代码繁琐臃肿的缺陷,其优点如下:(1)更加清晰的输入输出结构,减小了维护成本;(2)更加清晰的逻辑处理层次,每个元素只处理属于自己一级的信息;(3)避免了繁琐的取值与赋值代码。

图2是本发明实施例提供的一种xml数据结构转换装置的结构示意图,该装置用于实现图1所示的xml数据结构转换方法,参见图2,所述装置包括:

获取模块201,用于获取待转换的xml数据结构;

选择模块202,用于从预设的数据结构转换规则中选择第一数据结构转换规则,所述第一数据结构转换规则与所述待转换的xml数据结构相对应;

转换模块203,用于按照所述第一数据结构转换规则对所述待转换的xml数据结构进行转换。

在本发明实施例的一种实现方式中,所述选择模块202,用于将所述待转换的xml数据结构中的关键字段,依次与所述预设的数据结构转换规则中的关键字进行匹配;选取匹配成功的数据结构转换规则作为所述第一数据结构转换规则,所述匹配成功的数据结构转换规则的关键字与所述待转换的xml数据结构中的各个关键字段完全匹配。

在本发明实施例的另一种实现方式中,所述数据转换规则包括转换规则表;所述转换规则表,用于定义xml数据结构转换前和转换后各个字段的属性。

在本发明实施例的另一种实现方式中,所述字段的属性包括字段标识、字段父节点标识、字段名称、字段类型、存储过程名称、默认值和取值路径。

在本发明实施例的另一种实现方式中,当所述转换规则表中记载有存储过程名称时,所述转换模块,还用于调用所述存储过程名称对应的存储过程将所述待转换的xml数据结构中的数据存入数据库。

需要说明的是:上述实施例提供的xml数据结构转换装置在进行xml数据结构转换时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的xml数据结构转换装置与xml数据结构转换方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1