基于XPATH的XML配置文件恢复方法及其系统与流程

文档序号:18689965发布日期:2019-09-17 20:27阅读:189来源:国知局
基于XPATH的XML配置文件恢复方法及其系统与流程

本发明涉及XML语言运用领域,具体说的是基于XPATH的XML配置文件恢复方法及其系统。



背景技术:

XML语言作为可扩展标记语言,是一种允许用户对自己的标记语言进行定义的源语言,只要遵循一定的规则,XML的可扩展性几乎是无限的,而且这种扩展并不以结构混乱或影响基础配置为代价。XML文档格式的管理信息可以很容易地通过HTTP协议传输,由于HTTP是建立在TCP之上的,故管理数据能够可靠传输。XML还支持访问XML文档的标准API,如DOM等。XML格式是W3C的标准,各种平台通用,可移植性好。

XPATH即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言,基于XML的树状结构,提供在数据结构树中找寻节点的能力。因此,常会被用来在XML文档中进行导航。

基于XML的上述优点,XML文件常常被用来保存应用程序的配置。对于以XML文件保存配置的应用程序来说,通常情况下,在发布软件版本时会有一个XML文件作为运行配置文件,此外还有一份保存在可存储介质上的XML配置文件。这样就存在一个问题:当系统重启时就需要将保存在可存储介质上的 XML配置文件的内容恢复到随版本发布的运行配置文件中。

针对上面提到的当系统重启时需要将保存在可存储介质上的XML配置文件的内容恢复到随版本发布的运行配置文件中的问题,目前还没有完整的解决方案,并且,在恢复完XML配置之后系统运行的XML配置就是保存在可存储介质上的XML配置,这样就会使得应用程序在版本发布时不能支持修改原有默认值,所述修改包括用户对可存储介质上XML配置文件的修改,以及软件开发者对版本发布的XML配置文件的修改,但是在实际使用过程中常常有这方面的需求。

基于上述问题,专利申请号为201310100931.4的中国专利申请公开了一种基于结构概要的数据恢复方法,提及利用XPATH来恢复XML中感兴趣的节点信息,具体公开如何解析XPATH查询语句以及如何恢复感兴趣的XML节点数据,并未提供将一个XML配置文件中的内容恢复到另一个XML配置文件中的方法。而专利申请号为201110200086.9的另一中国专利申请公开了一种基于查询工作量估算的XML分片方法,具体公开了遍历XML节点,以实现XML分片的方法,同样未提供能够很好解决上述问题的方法。

因此,有必要提供一种基于XPATH的XML配置文件恢复方法及其系统,能够针对使用XML文件来保存配置的应用程序,解决现有技术没有提供可行的方案以解决XML配置文件的恢复问题。



技术实现要素:

本发明所要解决的技术问题是:提供基于XPATH的XML配置文件恢复方法及其系统,实现在系统重启时能够将XML配置文件中的内容恢复到另一个 XML配置文件中。

为了解决上述技术问题,本发明采用的技术方案为:

基于XPATH的XML配置文件恢复方法,包括:

遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

依据所述绝对路径,利用XPATH在第二配置文件中查询是否存在对应的叶子节点,所述第二配置文件为保存在可存储介质上的配置文件;

若存在,将第二配置文件中所述叶子节点的值写入所述第一配置文件中对应叶子节点。

本发明提供的另一个技术方案为:

基于XPATH的XML配置文件恢复系统,包括:

第一遍历模块,用于遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

第一查询模块,用于依据所述绝对路径,利用XPATH在第二配置文件中查询是否存在对应的叶子节点,所述第二配置文件为保存在可存储介质上的配置文件;

第一写入模块,用于查询模块的查询结果为若存在时,将第二配置文件中所述叶子节点的值写入所述第一配置文件中对应叶子节点。

本发明的有益效果在于:本发明通过获取随版本发布的第一配置文件中从根节点开始的所有叶子节点的绝对路径,再利用XPATH依据绝对路径去可存储介质上的配置文件中查询是否存在对应的叶子节点的值,存在的话,将该值恢复到第一配置文件中。以此实现在系统重启配置时,保存在可存储介质上的用户配置文件能够被恢复到随版本发布的运行配置文件中;确保基于XML配置文件的应用程序能够正常运行。

附图说明

图1为本发明基于XPATH的XML配置文件恢复方法的基础流程示意图;

图2为本发明实施例一的流程示意图;

图3为本发明实施例二的流程示意图;

图4为本发明基于XPATH的XML配置文件恢复系统的功能模块组成示意图;

图5为本发明实施例三对应实现单实例和多实例节恢复的功能模块组成示意图;

图6为本发明实施例三中对应实现单实例节点恢复保留版本配置文件修改节点默认值的功能模块组成示意图。

标号说明:

1、第一遍历模块;2、第一查询模块;3、第一写入模块;4、备份模块;

5、第二查询模块;6、第一判断模块;7、第二写入模块;8、继续模块;

9、第一删除模块;10、获取模块;11、第二判断模块;12、第二删除模块;

13、拷贝模块;14、第二遍历模块;15、读取模块。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:通过获取随版本发布的运行配置文件中所有叶子节点的绝对路径,再依据绝对路径,利用XPATH在用户配置文件中查询,将对应叶子节点的值恢复到运行配置文件中,实现XML配置文件的恢复。

本发明涉及的技术术语解释:

请参照图1,本发明提供一种基于XPATH的XML配置文件恢复方法,包括:

遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

依据所述绝对路径,利用XPATH在第二配置文件中查询是否存在对应的叶子节点,所述第二配置文件为保存在可存储介质上的配置文件;

若存在,将第二配置文件中所述叶子节点的值写入所述第一配置文件中对应叶子节点。

从上述描述可知,本发明的有益效果在于:由于XML配置文件中基本都为单实例节点(节点的绝对路径唯一对应该节点)。因此,通过获取每个叶子节点的绝对路径,再结合XPATH去被恢复XML配置文件中查询待恢复叶子节点的值,将其恢复到待恢复配置文件中,能够保证待恢复配置文件中几乎所有的叶子节点的值都能得到恢复。

需要说明的是,上述恢复方法够保证在单实例节点恢复过程中,当被恢复 XML配置文件中不存在与待恢复叶子节点的绝对路径相同的叶子节点时获取的唯一性;而存在的情况下,利用XPATH去查询获取到的将是一个结果集,绝对路径相同的各叶子节点值在该结果集中的存放顺序是一定的,因此在将被恢复 XML配置文件的内容往待恢复XML配置文件中恢复时,也能做到绝对路径相同的叶子节点两边一一对应,从而在两种情况下均能保证配置恢复的准确性。

请参照图3,进一步的,所述XML配置文件恢复方法具体为:

备份上一次配置恢复时随版本发布的第一配置文件,作为基准配置文件;

遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

依据所述绝对路径,利用XPATH分别在第二配置文件和基准配置文件中查询是否存在对应的叶子节点;

若同时存在,判断第二配置文件中所述叶子节点的值与基准配置文件中所述叶子节点的值是否相同;

若不同,则将第二配置文件中所述叶子节点的值写入第二配置文件中对应叶子节点;

若相同,则不操作,继续查询所述绝对路径中的下一叶子节点。

由上述描述可知,若第二配置文件与基准配置文件中存储的待恢复节点的值相同,则证明相比上一次系统配置恢复,用户未对第二配置文件进行修改,不将第二配置文件中该节点的值恢复到第一配置文件中;这样应用程序发布版本时,若开发者对第一配置文件中修改了节点的默认值,则在进行配置恢复后,该节点的值不会被覆盖掉,从而使得运行的第一配置文件能够支持应用程序发布版本时对配置文件中叶子节点默认值的修改。若第二配置文件与基准配置文件中存储的待恢复节点的值不相同,则证明相比上一次系统配置恢复,用户对保存在存储介质上的第一配置文件做了修改,由于用户配置文件的优先级大于版本配置文件,因此,必须将第二配置文件中对该节点的修改对应恢复到第一配置文件中,实现同步用户对配置文件的修改。

请参照图2,进一步的,进一步包括:

对所述第一配置文件中多实例中的实例进行删除,一个多实例对应仅保存一个实例;

依次获取所述第一配置文件中的一多实例;

判断所述第二配置文件中与所述一多实例对应的多实例中实例的个数;

若个数为零,则在所述第一配置文件中删除所述一多实例对应的实例;

若个数不为零,则对第一配置文件中所述一多实例中的实例进行拷贝,直至所述一多实例中的实例的个数与所述第二配置文件中所述对应的多实例中的实例的个数一致;

依次遍历第一配置文件中各个多实例下的叶子节点;

依据所遍历到的多实例的实例号和对应的叶子节点的名称,从所述第二配置文件中读取对应多实例下对应叶子节点的值,并将所述值写入第一配置文件中。

由上述描述可知,针对配置文件中的多实例节点的恢复,由于多实例中的节点的绝对路径不唯一对应该节点,存在多个节点的绝对路径相同的情况;但是,基于多实例的各个节点的结构是一样的。因此,在第一配置文件中,对应一个多实例只需保存一个节点作为参照,其余均删除,而不是直接将第二配置文件中的多实例直接覆盖过去,这样能够保证恢复之后第一配置文件的多实例结构始终与版本发布时的多实例结构是一致的(比如新版本发布的多实例新增或者删除了叶子节点,与用户保存的结构,即第二配置文件的结构相比有更新)。

进一步的,所述依据所遍历到的多实例的实例号和对应的叶子节点的名称,从所述第二配置文件中读取对应多实例下对应叶子节点的值,并将所述值写入第一配置文件中,具体为:

依据所遍历到的多实例的实例号和对应的叶子节点的名称,判断所述第二配置文件中对应多实例下对应的叶子节点是否存储有对应的值;

若是,则将所述值写入第一配置文件中;若否,则不操作,继续遍历下一叶子节点。

由上述描述可知,依据实例号和叶子节点的名称去第二配置文件中查找,若找到,才恢复到第一配置文件中,这样能保证版本发布的第一配置文件中存在并且用户配置文件(第一配置文件)也有保存的节点会被恢复,其他节点不会被恢复而仍然使用版本发布的默认值,从而保留版本发布时对配置文件的修改,从而满足实际使用需求。

进一步的,所述遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径,具体为:

通过深度优先算法遍历随版本发布的第一配置文件中所有的叶子节点,在遍历过程中保持中间节点信息,获取从根节点开始所有的叶子节点的绝对路径。

由上述描述可知,通过深度优先算法能够保证第一配置文件中的所有叶子节点都能被遍历到,且遍历过程中获取的中间节点信息的准确性;进而保证每个叶子节点的绝对路径的准确性,保证遍历的完整性和高效率。

本发明提供的另一个技术方案为:

请参照图4,基于XPATH的XML配置文件恢复系统,包括:

第一遍历模块,用于遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

第一查询模块,用于依据所述绝对路径,利用XPATH在第二配置文件中查询是否存在对应的叶子节点,所述第二配置文件为保存在可存储介质上的配置文件;

第一写入模块,用于查询模块的查询结果为若存在时,将第二配置文件中所述叶子节点的值写入所述第一配置文件中对应叶子节点。

请参照图5 ,进一步的,所述系统具体包括:

备份模块,用于备份上一次配置恢复时随版本发布的第一配置文件,作为基准配置文件;

第一遍历模块,用于遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

第二查询模块,用于依据所述绝对路径,利用XPATH分别在第二配置文件和基准配置文件中查询是否存在对应的叶子节点;

第一判断模块,用于所述第二查询模块的查询结果为同时存在时,判断第二配置文件中所述叶子节点的值与基准配置文件中所述叶子节点的值是否相同;

第二写入模块,用于若判断模块的判断结果为不同时,将第二配置文件中所述叶子节点的值写入第二配置文件中对应叶子节点;

继续模块,用于若判断模块的判断结果为相同时,不操作,继续查询所述绝对路径中的下一叶子节点。

请参照图6 ,进一步的,所述系统还包括:

第一删除模块,用于对所述第一配置文件中多实例中的实例进行删除,一个多实例对应仅保存一个实例;

获取模块,用于依次获取所述第一配置文件中的一多实例;

第二判断模块,用于判断所述第二配置文件中与所述一多实例对应的多实例中实例的个数;

第二删除模块,用于第二判断模块的判断结果为个数为零时,在所述第一配置文件中删除所述一多实例对应的实例;

拷贝模块,用于第二判断模块的判断结果为个数不为零时,对第一配置文件中所述一多实例中的实例进行拷贝,直至所述一多实例中的实例的个数与所述第二配置文件中所述对应的多实例中的实例的个数一致;

第二遍历模块,用于依次遍历第一配置文件中各个多实例下的叶子节点;

读取模块,用于依据所遍历到的多实例的实例号和对应的叶子节点的名称,从所述第二配置文件中读取对应多实例下对应叶子节点的值,并将所述值写入第一配置文件中。

进一步的,所述读取模块,具体用于依据所遍历到的多实例的实例号和对应的叶子节点的名称,判断所述第二配置文件中对应多实例下对应的叶子节点是否存储有对应的值;若是,则将所述值写入第一配置文件中;若否,则不操作,继续遍历下一叶子节点。

进一步的,所述第一遍历模块,具体用于通过深度优先算法遍历随版本发布的第一配置文件中所有的叶子节点,在遍历过程中保持中间节点信息,获取从根节点开始所有的叶子节点的绝对路径。

实施例一

请参照图2,本实施例提供一种基于XPATH的XML配置文件恢复方法,实现采用XML文件来保存配置的应用程序,在系统配置重启时能将保存在可存储介质上的用户配置文件的内容恢复到随版本发布的运行配置文件中。

在此,为了描述方便,将应用程序随版本发布的版本XML配置文件视为第一配置文件;将保存在可存储介质上的用户XML配置文件视为第二配置文件;第二配置文件的优先级大于第一配置文件,系统所运行的是恢复XML配置后的第一配置文件,即保存在可存储介质上的XML配置。

第一配置文件中存储有单实例和多实例,以单实例为主;单实例以及多实例中的节点基本上与第二配置文件中的节点具有对应关系。

下面分别就单实例节点的恢复以及多实例节点的恢复进行详细说明:

一、对配置文件中的单实例节点(节点的绝对路径唯一对应该节点)进行恢复

S1:遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;优选的,可以采用深度优先算法递归遍历第一配置文件中所有的叶子节点,并在遍历过程中通过保存中间节点信息来获取每个叶子节点的绝对路径。

S2:依据所述绝对路径,依序对绝对路径中的每一个叶子节点利用XPATH 在第二配置文件中查询是否存在与之对应的叶子节点;若存在,则执行S3;若不存在,则查询下一个叶子节点;

S3:将第二配置文件中该叶子节点的值写入所述第一配置文件中对该节点对应的叶子节点中;直至完成对所有叶子节点的绝对路径中每一个叶子节点的查询。

通过上述,能够保证第一配置文件中与第二配置文件有对应关系的所有单实例节点都能得到恢复,已经能够保证系统的正常运行。但是,由于第一配置文件中往往还存在多实例节点,虽然经过上述过程,多实例节点中的多个实例下的单节点能够得到恢复,但是可能存在恢复不完整的问题,这样将会给系统运行带来一定的影响。

因此,在上述单实例恢复的基础上,本实施例还提供针对多实例的恢复过程:

为了保证第一配置文件中不管是单实例还是多实例的每个节点都能得到恢复,优选的,本实施例提供包括单实例节点恢复过程以及多实例节点恢复过程,二者没有固定的先后顺序,由于单实例节点远多于多实例节点,因此,一般情况下先执行单实例节点恢复过程。单实例节点的恢复过程见上述。

二、对配置文件中的多实例节点(节点的绝对路径不唯一对应该节点,存在多个节点的绝对路径相同的情况)进行恢复

SS1:将第一配置文件中一个多实例对应仅保存一个实例作为参照,其他实例均予以删除;

SS2:依次获取所述第一配置文件中的一个多实例;

SS3:读取所述第二配置文件中与所获取的实例对应的多实例的实例个数;

若实例个数为零,则在所述第一配置文件中删除所述一多实例下的实例;返回SS2,继续获取下一个多实例,直至所有多实例都获取完毕,然后执行SS4;

若个数不为零,则对第一配置文件中所述一多实例中的实例进行拷贝,直至所述一多实例中的实例的个数与所述第二配置文件中所述对应的多实例中的实例的个数一致;然后返回SS2,继续获取下一个多实例,直至所有多实例都获取完毕,然后执行SS4;

SS4:依次遍历第一配置文件中各个多实例下的叶子节点;

SS5:依据所遍历到的多实例的实例号和对应的叶子节点的名称,从所述第二配置文件中读取对应多实例下对应叶子节点的值,并将所述值写入第一配置文件中。

所述SS5具体为:

依据所遍历到的多实例的实例号和对应的叶子节点的名称,判断所述第二配置文件中对应多实例下对应的叶子节点是否存储有对应的值;

若是,则将所述值写入第一配置文件中;若否,则不操作,继续遍历下一叶子节点。

只有在第二配置中找到对应的值才恢复到第一配置文件中,这样能保证第一配置文件中存在并且第二配置文件中也有保存的节点才会被恢复,其他节点不会被恢复,而仍然为版本发布时的默认值,从而实现版本发布时对配置文件中节点默认值的修改,更好的满足实际使用需求。

通过上述单实例节点以及多实例节点的恢复步骤,能够进一步保证第一配置文件中与第二配置文件存在对应关系的所有节点的值都能从第二配置文件中得到恢复,保证基于XML文件保存系统配置的系统能够在配置重启后正常的运行。

实施例二

请参照图3,本实施例在实施例一的基础上,进一步延伸,相同之处不在复述,区别点在于,针对单实例节点的恢复过程,使之能够实现在同步用户对配置文件的修改的基础上,保留应用程序发布版本时对叶子节点默认值的修改。

支持上述功能的单实例节点的恢复过程具体可以包括以下步骤:

S01:在每次恢复之前,备份一份随版本发布的第一配置文件,作为下一次恢复时的基准配置文件;

S02:采用深度优先算法递归遍历随版本发布的第一配置文件中所有的叶子节点,遍历过程中记录中间节点信息,从而获取从根节点开始的所有的叶子节点的绝对路径;

S03:依据绝对路径,利用XPATH分别在第二配置文件和基准配置文件中查询是否存在与之对应的叶子节点;

若同时存在,则判断第二配置文件中记录的该叶子节点的值与基准配置文件中记录的该叶子节点的值是否相同;

若不同,则将第二配置文件中所述叶子节点的值恢复到第二配置文件中对应叶子节点中;

若相同,则不操作,返回S03,继续查询所述绝对路径中的下一叶子节点。

上述中,备份的基准配置文件为上一次配置恢复时随版本发布时的第一配置文件,即相对本次配置恢复过程第一配置文件的纯净版本,开发者未做修改的版本,正常情况下,纯净版本的第一配置文件与纯净版本的第二配置文件中对应节点的值是相同的。在这一次的恢复过程中,开发者可能在上一次配置文件的基础上对节点的默认值进行修改,若一节点对应基准配置文件的值与对应第二配置文件的值相同,则证明用户未对第二配置文件进行修改,则不进行恢复,这样就能保留第一配置文件中该节点的值不变,即在配置恢复后在第一配置文件中该节点的值不会被覆盖掉,从而实现支持应用程序发布版本时修改叶子节点默认值。

实施例三

请参阅图5至图6,本实施例在实施例一和实施例二的基础上,提供一种基于XPATH的XML配置文件恢复系统,

请参阅图4,所述系统包括:

第一遍历模块1,用于遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

第一查询模块2,用于依据所述绝对路径,利用XPATH在第二配置文件中查询是否存在对应的叶子节点,所述第二配置文件为保存在可存储介质上的配置文件;

第一写入模块3,用于查询模块的查询结果为若存在时,将第二配置文件中所述叶子节点的值写入所述第一配置文件中对应叶子节点。

请参阅图6,优选的,针对多实例节点,本实施例的系统还包括:

第一删除模块9,用于对所述第一配置文件中多实例中的实例进行删除,一个多实例对应仅保存一个实例;

获取模块10,用于依次获取所述第一配置文件中的一多实例;

第二判断模块11,用于判断所述第二配置文件中与所述一多实例对应的多实例中实例的个数;

第二删除模块12,用于第二判断模块的判断结果为个数为零时,在所述第一配置文件中删除所述一多实例对应的实例;

拷贝模块13,用于第二判断模块的判断结果为个数不为零时,对第一配置文件中所述一多实例中的实例进行拷贝,直至所述一多实例中的实例的个数与所述第二配置文件中所述对应的多实例中的实例的个数一致;

第二遍历模块14,用于依次遍历第一配置文件中各个多实例下的叶子节点;

读取模块15,用于依据所遍历到的多实例的实例号和对应的叶子节点的名称,从所述第二配置文件中读取对应多实例下对应叶子节点的值,并将所述值写入第一配置文件中。

优选的,所述读取模块15,具体用于依据所遍历到的多实例的实例号和对应的叶子节点的名称,判断所述第二配置文件中对应多实例下对应的叶子节点是否存储有对应的值;若是,则将所述值写入第一配置文件中;若否,则不操作,继续遍历下一叶子节点。

请参阅图5,优选的,针对单实例支持版本发布时对节点默认值进行修改的过程,系统具体包括以下功能模块来实现:

备份模块4,用于备份上一次配置恢复时随版本发布的第一配置文件,作为基准配置文件;

第一遍历模块1,用于遍历随版本发布的第一配置文件中所有的叶子节点,获取所有的叶子节点的绝对路径;

第二查询模块5,用于依据所述绝对路径,利用XPATH分别在第二配置文件和基准配置文件中查询是否存在对应的叶子节点;

第一判断模块6,用于所述第二查询模块的查询结果为同时存在时,判断第二配置文件中所述叶子节点的值与基准配置文件中所述叶子节点的值是否相同;

第二写入模块7,用于若判断模块的判断结果为不同时,将第二配置文件中所述叶子节点的值写入第二配置文件中对应叶子节点;

继续模块8,用于若判断模块的判断结果为相同时,不操作,继续查询所述绝对路径中的下一叶子节点。

综上所述,本发明提供的基于XPATH的XML配置文件恢复方法及其系统,不仅能够实现在系统重启配置时,保存在可存储介质上的用户配置文件能够完整且高效率地被恢复到随版本发布的运行配置文件中;而且还能支持应用程序在发布版本时修改节点默认值的功能,以满足实际使用的需求;进一步的,采用深度优化遍历算法来遍历叶子节点,能保证遍历的完整性和高效率;再进一步的,结合XPATH技术来根据叶子节点的绝对路径在配置文件中查询,能够保证搜索的效率和准确性,从而加快XML配置文件恢复的速度。本发明具备良好的通用性和可实施性,能够准确且快速地解决应用程序的XML配置文件恢复问题,同时满足实际使用的各种需求。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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