一种XML文件处理方法及装置与流程

文档序号:16248521发布日期:2018-12-11 23:48阅读:146来源:国知局
一种XML文件处理方法及装置与流程

本发明涉及xml技术领域,特别是涉及一种xml文件处理方法及装置。

背景技术

xml(extensiblemarkuplanguage,可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言,在internet环境中跨平台的一种依赖于内容的技术,是当前处理结构化文档信息的有力工具。它是当前最常用的一种简单的数据存储语言,可以使用一系列简单的自定义标记描述数据。

在某些应用场景中,需要将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文件依据结构树进行拆分保存至若干个数据库表中可以解决单张表过大,造成查询或者其他操作的耗时较长的问题,进而提升了系统性能。

附图说明

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

图1为本发明实施例提供的一种xml文件处理方法的流程示意图;

图2为本发明实施例提供的一种创建结构树的方法的流程示意图;

图3为本发明实施例提供的一种结构树的示意图;

图4为本发明实施例提供的另一种结构树的示意图;

图5为本发明实施例提供的一种xml文件处理装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有设定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。

在本发明实施例中提供了一种xml文件处理方法,参见图1,该方法包括:

s11、根据待处理的xml文件的标签,生成所述待处理的xml文件的结构树。

xml是一种用于标记电子文件使其具有结构性的标记语言。如下所示为一种xml文件的开头。

其中,<>内的内容即为该xml文件的标签,例如,<messageheader>、<reportsn>。

在本发明实施例中还提供了一种生成结构树的方法,参见图2,该方法包括:

s111、获取待处理的xml文件的标签;

由于xml文件属性,其会带有标签,例如上述举例说明的xml文件中的<>中的内容就是其标签。

s112、对所述标签进行合并处理,得到合并后的标签;

在对标签进行合并处理的过程中,主要是对名称相同的标签进行合并。

s113、确定所述合并后的标签的级别关系;

s114、根据所述级别关系生成所述待处理的xml文件的结构树。

然后需要确定合并后的标签的级别关系,也就是各个标签的上下级关系,因为最终生成的是结构树,即确定叶子节点对应的子标签。

例如,待处理的xml文件格式如下:

该xml文件对应生成的结构树如图3所示。其中,所有的叶子节点所表示的标签中必须存在子标签,但是其子标签仅包含具体内容,不再嵌套子标签,即将所有的节点的高度减1,形成最终的结构树。

可选的,在本发明的实施例中还包括:

依据所述合并后的标签的级别关系,检测所述叶子节点的嵌套关系是否正确,如果否,则生成异常信息。

即xml文件必须被正确的嵌套,否则会出现格式错误。

s12、对所述结构树进行编码,确定所述结构树的叶子节点。

需要说明的是,对结构树进行编码,确定该结构树的叶子节点,也就是首先要明确该结构树中的各个叶子节点,然后将叶子节点类型相同的进行合并处理,便于后续数据库表的拆分。

例如,如图4所示为本发明实施例中提供的另一种结构树的结构示意图。在图4中显示的叶子节点有messageheader(001001),queryreq(001002),identity(002001),residence(002002),residence(002003)。但是residence(002002),residence(002003)这两个叶子节点类型相同,可以合并为一个,所以在后续拆分时,选取的节点为residence(002002)。

s13、依据所述叶子节点的节点内容,创建数据库表;

在创建数据库表的过程中,可以包括以下步骤:

生成所述待处理的xml文件的数据库主表;

获取所述叶子节点的子标签;

依据所述子标签对所述数据库主表进行拆分,得到若干个数据库表。

根据叶子节点的节点内容也可以确定拆分节点,仍以上述图4为例说明,具体的可以拆分出messageheader(001001),queryreq(001002),identity(002001)和residence(002002)共4张表。

s14、将所述待处理的xml文件保存至所述数据库表。

保存过程就是将较大的xml文件拆分为多个小数据块,保存到多张数据库表中。

具体的该过程可以包括以下步骤:

获取所述待处理的xml文件的标识信息;

依据所述xml文件的标识信息对所述xml文件进行拆分,并将拆分后的xml文件与所述子标签进行映射;

将映射后的xml文件插入到与所述子标签对应的数据库表中。

本发明提供了一种xml文件处理方法,将xml文件的标签以树形结构表示生成了结构树,然后对该结构树进行编码确定叶子节点,创建数据库表,将待处理的xml文件保存至对应的数据库表中。通过将xml文件依据结构树进行拆分保存至若干个数据库表中可以解决单张表过大,造成查询或者其他操作的耗时较长的问题,进而提升了系统性能。

举例说明,如上所示的xml文件,其中messageheader中包含的子标签有:reportnum、querytime、createtime。

根据这些叶子节点具体包含的子标签,进行建表:

其中,reportnum、querytime、createtime是messageheader中原有的标签,last_upd_data表示最新更新时间,credit_rpt_no表示客户识别号,seg_no表示所在节点的编码。

queryreq、identity等都包含许多标签,建表策略与messageheader相同。

residence(002002001),residence(002002002)这两个叶子节点类型相同,包含的子标签一样,都是:address、residencetype、gettime。这两个叶子节点类型相同,可以合并为一个,所以建表为:

当将xml文件存储到数据库表时首先要获取其对应的标识信息,例如,当前要保存客户识别号为18276008的xml文件,该识别号为其标识信息,根据该标识信息确定了其对应的叶子节点也就是标签,然后进行拆分,并将拆分后的文件块与对应的子标签进行映射即进行相互匹配,匹配后就将对应的文件块插入到与该子标签对应的数据库表中。

例如,上述的xml文件的<messageheader>包含内容:

<messageheader>

<reportnum>2013121300000605069660</reportnum>

<querytime>2013.12.1316:51:17</querytime>

<createtime>2013.12.1316:51:21</createtime>

</messageheader>

在保存这个xml文件时,可以在数据库表中插入一行数据,该数据为子标签中具体的值,例如:

其中,<residence>中包含内容:

<residence>

<address>开户时的居住地址</address>

<residencetype>1|自置</residencetype>

<gettime>2009.04.12</gettime>

</residence>

<residence>

<address>当前居住地址</address>

<residencetype>3|亲属楼宇</residencetype>

<gettime>2005.10.20</gettime>

</residence>

因为这两个叶子节点类型相同,可以保存在同一张表中,但是他们的编码不同,所以在保存这个xml文件时,表ccps.residence插入这样的两行数据:

在之后查询数据库表中ccps.residence的数据时,可知credit_rpt_no=18276008属于客户18276008,seg_no=002002001是该客户的源xml文件中第一个<residence>。

因此,将xml文件进行拆分成多张数据库表,可以避免单张表过大。并对每个叶子节点编码,当叶子节点的数据保存到表中时,可以通过这个编码快速定位数据库中的数据在源xml文件中的位置。

对应的,在本发明实施例中还提供了一种xml文件处理装置,参见图5,包括:

生成单元10,用于根据待处理的xml文件的标签,生成所述待处理的xml文件的结构树;

编码单元20,用于对所述结构树进行编码,确定所述结构树的叶子节点;

创建单元30,用于依据所述叶子节点的节点内容,创建数据库表;

保存单元40,用于将所述待处理的xml文件保存至所述数据库表。

相较于现有技术,本发明提供了一种xml文件处理方法,在生成单元中将xml文件的标签以树形结构表示生成了结构树,然后通过编码单元和创建单元对该结构树进行编码确定叶子节点,创建数据库表,最后在保存单元中将待处理的xml文件保存至对应的数据库表中。通过将xml文件依据结构树进行拆分保存至若干个数据库表中可以解决单张表过大,造成查询或者其他操作的耗时较长的问题,进而提升了系统性能。

可选地,所述生成单元包括:

获取子单元,用于获取待处理的xml文件的标签;

合并子单元,用于对所述标签进行合并处理,得到合并后的标签;

级别确定子单元,用于确定所述合并后的标签的级别关系;

结构树生成子单元,用于根据所述级别关系生成所述待处理的xml文件的结构树。

可选地,还包括:

检测子单元,用于依据所述合并后的标签的级别关系,检测所述叶子节点的嵌套关系是否正确,如果否,则生成异常信息。

可选地,所述创建单元包括:

主表生成子单元,用于生成所述待处理的xml文件的数据库主表;

子标签获取子单元,用于获取所述叶子节点的子标签;

表拆分子单元,用于依据所述子标签对所述数据库主表进行拆分,得到若干个数据库表。

可选地,所述保存单元包括:

信息获取子单元,用于获取所述待处理的xml文件的标识信息;

文件拆分子单元,用于依据所述xml文件的标识信息对所述xml文件进行拆分,并将拆分后的xml文件与所述子标签进行映射;

保存子单元,用于将映射后的xml文件插入到与所述子标签对应的数据库表中。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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