一种XML文档处理方法、装置、电子设备及存储介质与流程

文档序号:29435090发布日期:2022-03-30 08:20阅读:62来源:国知局
一种XML文档处理方法、装置、电子设备及存储介质与流程
一种xml文档处理方法、装置、电子设备及存储介质
技术领域
1.本技术涉及文件解析技术领域,具体而言,涉及一种xml文档处理方法、装置、电子设备及存储介质。


背景技术:

2.现有技术中,xml作为扩展标记语言应用广泛,而对xml解析,现有的一种方法为:通过定义属性注解,建立实体类属性与xml文档中所需属性的映射关系,利用反射原理,解析xml中相应属性值赋值给实体类。这种方法在查找实体类属性对应路径时容易出错。在实际应用中,部分xml中所要提取的属性有的放在标签的属性中,有的则放在了两个标签之间的text中,且xml嵌套层级达到5层以上,相同的属性大量存在于同一个xml文档之中。通过上述方法应对这种复杂xml文档解析就显得力不从心,需要开发人员编辑很多重复代码,因此亟需一种应对复杂的多层嵌套xml文档的解析方法。


技术实现要素:

3.有鉴于此,本技术的目的在于提供一种xml文档处理方法、装置、电子设备及存储介质,用于提供一种应对复杂的多层嵌套xml的解析方法,以提高开发人员的编码效率。
4.第一方面,本技术实施例提供一种xml文档处理方法,包括:
5.获取待解析xml文档及待解析xml文档中的至少一个待解析属性;确定待解析属性是否存在对应的类模板文档,若存在则对类模板文档进行标注;针对每个待解析属性,确定待解析属性对应的类模板文档的标注中是否存在对应的元数据;若存在,则基于对应的元数据进行解析,以获取待解析属性对应的实体类对象。
6.优选地,通过以下方式确定待解析属性对应的类模板文档:针对每个待解析属性,确定该待解析属性对应的根属性节点;根据该根属性节点确定对应的实体类全路径名;根据该根属性节点对应的实体类全路径名匹配对应的类模板文档。
7.优选地,通过以下方式对类模板文档进行标注:根据待解析xml文档确定与该类模板文档相同类的元数据;将该元数据中的每个元数据的属性与类模板文档中的属性匹配,并生成对应的元数据映射表,元数据映射表的键为类模板文档的类名称,元数据映射表的键值为该类名称对应的元数据信息;其中,元数据信息包括元数据在类模板文档中的位置、元数据对应的类名称和元数据属性映射表。
8.优选地,元数据属性映射表的键为该元数据中每个元数据属性,键值为用于解析该元数据属性的元数据解析信息,其中,元数据解析信息包括该元数据属性的全路径名、该元数据属性的解析位置和该元数据属性的附加属性,元数据的附加属性为该元数据属性的子节点属性中的至少一个。
9.优选地,通过以下方式确定元数据的全路径名:将该元数据属性确定为目标属性节点;将该元数据属性对应的类名称确定为根属性节点;确定根属性节点至目标属性节点路径上的至少一个属性节点,并按顺序拼接以生成元数据的全路径名。
10.优选地,实体类对象包括目标类名称、多个目标属性和与目标属性对应的目标属性值,通过以下方式获取待解析属性对应的实体类对象:将该待解析属性对应的类模板文档的类名称确定为目标类名称;针对每个待解析属性,确定出该待解析属性对应的元数据属性;将该待解析属性和该待解析属性对应的元数据属性的附加属性,确定为多个目标属性;根据元数据属性映射表,确定每个目标属性对应的目标属性值。
11.优选地,通过以下方式确定每个目标属性对应的目标属性值:根据该目标属性对应的元数据属性,获取对应的元数据属性的解析位置;根据该元数据属性的解析位置,确定该目标属性对应的目标属性值。
12.第二方面,本技术实施例还提供一种xml文档处理装置,包括:
13.获取模块,用于获取待解析xml文档及待解析xml文档中的至少一个待解析属性;
14.标注模块,用于确定待解析属性是否存在对应的类模板文档,若存在则对类模板文档进行标注;
15.判断模块,用于针对每个待解析属性,确定待解析属性对应的类模板文档的标注中是否存在对应的元数据;
16.解析模块,用于若存在,则基于对应元数据进行解析,以获取待解析属性对应的实体类对象。
17.第三方面,本技术实施例还提供一种电子设备,包括:处理器、存储器和总线,存储器存储有处理器可执行的机器可读指令,当电子设备运行时,处理器与存储器之间通过总线通信,处理器执行机器可读指令,以执行如上述xml文档处理方法的步骤。
18.第四方面,本技术实施例还提供一种计算机可读存储介质,存储介质上存储有计算机程序,计算机程序被处理器运行时执行如上述xml文档处理方法的步骤。
19.本技术实施例提供的一种xml文档处理方法、装置、电子设备及存储介质,通过获取待解析xml文档和待解析xml文档中的至少一个待解析属性,根据待解析属性确定匹配的类模板文档,在对应的类模文档中将待解析属性的元数据标注在类模板文档中,这些步骤可以在程序初始化时完成,对待解析属性解析时,可以针对每个待解析数据确定对类模板文档中标注的元数据,并基于元数据对待解析属性进行解析,以获得待解析属性对应的实体类对象,实现了同一类的待解析属性可以共用一个类模板文档,避免了开发人员重复编码,提高了开发人员的编码效率,适应性较高。
20.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
21.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
22.图1为本技术实施例所提供的一种xml文档处理方法的流程图;
23.图2为本技术实施例所提供的一种获取待解析属性对应的实体类对象的步骤的流程图;
24.图3为本技术实施例所提供的一种xml文档处理装置的结构示意图;
25.图4为本技术实施例所提供的电子设备的结构示意图。
具体实施方式
26.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,应当理解,本技术中的附图仅起到说明和描述的目的,并不用于限定本技术的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本技术中使用的流程图示出了根据本技术的一些实施例实现的操作。应当理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本技术内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
27.另外,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的全部其他实施例,都属于本技术保护的范围。
28.现有技术中,xml作为扩展标记语言应用广泛,而对xml解析,现有的一种方法为:通过定义属性注解,建立实体类属性与xml文档中所需属性的映射关系,利用反射原理,解析xml中相应属性值赋值给实体类。这种方法在查找实体类属性对应路径时容易出错。在实际应用中,部分xml中所要提取的属性有的放在标签的属性中,有的则放在了两个标签之间的text中,且xml嵌套层级达到5层以上,相同的属性大量存在于同一个xml文档之中。通过上述方法应对这种复杂xml文档解析就显得力不从心,需要开发人员编辑很多重复代码,因此需要一种应对复杂的多层嵌套xml文档的解析方法。
29.针对上述问题,本技术实施例提供了一种xml文档处理方法、装置、电子设备及存储介质,下面通过实施例进行描述。
30.为便于对本技术进行理解,下面结合具体实施例对本技术提供的技术方案进行详细说明。
31.请参阅图1,为本技术实施例提供的一种xml文档处理方法,该方法包括:
32.s101、获取待解析xml文档及待解析xml文档中的至少一个待解析属性。
33.这里的待解析xml文档指代的是当前需要解析的xml文档,可以是用于执行该xml文档处理方法的系统新输入的xml文档。这里的待解析属性为想要解析的属性,待解析属性为待解析xml文档中存在的属性中的至少一个。这里的属性可以为xml文档中的每个标签中对应的元素,例如《code》#{code}《/code》中,《code》和《/code》为标签的起始字段和结束字段,其中code可以为一个属性。用户可以在系统中输入当前想要提取的实体类或实体类中的属性,作为待解析属性。若用户输入的为实体类,则待解析属性为实体类中的所有属性。
34.s102、确定待解析属性是否存在对应的类模板文档,若存在则对类模板文档进行标注。
35.这里的类模板文档为预设的模板文档。这里的一个类模板文档中包括一个实体类下的所有属性,即不同的实体类可以预设不同的类模板文档,可以通过类模板文档的类名
称进行区分。这里的类名称即为实体类的名称。
36.具体的,可以根据一个复杂的xml文档创建类模板文档。首先确定出该xml文档中所有实体类,针对每个实体类确定出该类的所有属性,将一个类对应的所有元数据作为一个类模板文档。此处可以建立实体类全路径名和类模板文档之间的映射,即说明该类模板文档需要解析成个实体类,例如,通过demo=cn.whitetown.smartxml.demo.entity.demosubject,将demo这个类模板文档解析成demosubject类。这里的元数据指代的是xml文档中的原始字段数据。每个类模板文档中包括一个类中所有属性对应的原始字段数据。
37.s103、针对每个待解析属性,确定待解析属性对应的类模板文档的标注中是否存在对应的元数据。
38.s104、若存在,则基于对应的元数据进行解析,以获取待解析属性对应的实体类对象。
39.示例性的,如以下一个xml文档所示:
[0040][0041]
其中,类名称为person,该实体类中包括id、code、tel、birth以及addr等共五个属性。其中对于属性id和birth,对应的属性值的解析位置在标签中,而属性code、tel和addr,对应的属性值的解析位置则在text中,这是两种不同的解析位置。
[0042]
示例性的,若此时想要解析的为person类所有属性,首先需要通过java解析出person类的全路径名称,例如解析出的全路径名称可以为com.hanclouds.demotest,并通过这一全路径名称确定出对应的类模板文档,这里可以确定出一个类名称为person的类模板文档。再将待解析文档中的person类的元数据找到,针对每个属性(本实施例可以指上述五个属性),确定待解析文档中该属性对应的元数据中属性值的解析位置是否与类模板文档中该属性的属性值的解析位置一致,若一致,则可以确定该类模板文档为该待解析属性对应的类模板文档,并待解析xml文档中person对应的元数据信息标注在该类模板文档中。这里的元数据信息用于对该类(本实施例中可以指person)进行解析。标注的目的为将实体类中需要解析的元数据属性的位置标注在类模板文档中。
[0043]
元数据信息可以包括元数据在类模板文档中的位置、元数据对应的类名称和元数据属性映射表。这里的元数据在类模板文档中的位置指代的可以是实体类在该类模板文档的地址,这里的元数据对应的类名称指代的可以是该实体类的类名称。可以理解的是,这里待解析属性对应的类名称和类模板文档的类名称是一致的。
[0044]
进一步的,若这里没有匹配到待解析属性对应的类模板文档,则需要针对匹配失败的待解析属性返回匹配失败的结果。开发人员可以在后续阶段收集匹配失败的结果,并根据这些结果更新类模板文档,进而提高了本技术对不同格式xml文档的解析能力。
[0045]
具体的,在确定出待解析属性对应的类模板文档后,基于每个待解析属性确定出在该待解析属性对应的类模板文档,确定出该待解析属性对应的元数据属性和用于解析该元数据属性的元数据解析信息。并根据元数据解析信息解析生成对应的实体类对象。
[0046]
本技术实施例提供的一种xml文档处理方法,通过获取待解析xml文档和待解析xml文档中的至少一个待解析属性,根据待解析属性确定匹配的类模板文档,在对应的类模文档中将待解析属性的元数据标注在类模板文档中,这些步骤可以在程序初始化时完成,对待解析属性解析时,可以针对每个待解析数据确定对类模板文档中标注的元数据,并基于元数据对待解析属性进行解析,以获得待解析属性对应的实体类对象,实现了同一类的待解析属性可以共用一个类模板文档,而传统模式下,开发者需要人为去查找需要解析的属性,然后记录到另一个文档中,再通过编程一个一个去解析,本方案则只需要将需要解析的属性在模板文档标注,然后自动实现解析,避免了开发人员重复编码,提高了开发人员的编码频率。
[0047]
在本技术的一个实施例中,元数据信息包括元数据在类模板文档中的位置、元数据对应的类名称和元数据属性映射表。其中元数据在类模板文档中的位置和元数据对应的类名称都是对元数据的解析,元数据属性映射表则是起到对元数据解析的重要作用。
[0048]
其中,元数据属性映射表的键为该元数据中的每个元数据属性,键值则是用于解析对应元数据属性的元数据解析信息。这里的元数据解析信息包括该元数据属性的全路径名、该元数据属性的解析位置和该元数据属性的附加属性。
[0049]
这里的元数据属性的全路径名指代的是元数据属性在xml文档中的xpath值。具体的,可以通过开源框架jsoup解析标注后的类模板文档,确定出所有的元数据属性。对于其中一个元数据属性,将该元数据属性确定为目标属性节点,将该元数据属性对应的类名称确定为根属性节点,依次查找目标属性节点的父级属性节点直到跟属性节点截至,将路径上的所有属性节点按顺序拼接,最终得到元数据的全路径名。示例性的,person/addr则为addr的全路径名。
[0050]
这里的元数据属性的附加属性为该元数据属性的子节点属性中的至少一个。示例性的,《id code=001value=#{personid}》这个标签中,可能同路径下有多个id标签,这些标签通过code的值进行了区分,如果仅知道xpath和解析位置是无法区分的,此时需要记录下code=001这一附加属性作为解析时的判断依据。这里的code则为id的一个子节点属性。
[0051]
请参阅图2,为本技术一实施例提供的获取待解析属性对应的实体类对象的步骤的流程图,该步骤具体包括:
[0052]
s201、将该待解析属性对应的类模板文档的类名称确定为目标类名称。
[0053]
s202、针对每个待解析属性,确定出该待解析属性对应的元数据属性。
[0054]
s203、将该待解析属性和该待解析属性对应的元数据属性的附加属性,确定为多个目标属性。
[0055]
s204、根据元数据属性映射表,确定每个目标属性对应的目标属性值。
[0056]
这里的实体类对象包括目标类名称、多个目标属性和与目标属性对应的目标属性值。可以理解的是,对于待解析属性,可以将其解析到对应的实体类下,因此最后输出的实体类对象分别包括实体类的类名称,该实体类下的多个目标属性和对应的目标属性值。例如当待解析属性为person时,最终输出的实体类对象可以通过public class person{private integer id;private string code;private string tel;private date birthdaydate;private string addr}获得。当待解析属性为id时,最终输出的实体类对象可以通过public class person{private integer id;private string code}获得。
[0057]
可以理解的是,如果存在同名属性,则需要同时记录附加属性,将附加属性和待解析属性共同作为实体类对象下的多个目标属性,再解析出每个目标属性的目标属性值,最终得到输出的实体类对象。从而避免当前待解析文档其他位置有同名属性导致解析偏差,提高了本技术解析的准确性。
[0058]
具体的,针对每个目标属性,根据该目标属性对应的元数据属性,确定出对应的元数据属性的解析位置,例如《person1 id=”#{id1}”》,此处的id1位于标签之中,如《tel》#{tel1}《/tel》的tel,则是位于text,即标签之间。根据该元数据属性的解析位置,确定该目标属性对应的目标属性值。例如id的目标属性值为id1,tel的目标属性值为tel1。
[0059]
在本技术实施例中,当有新的xml需要解析时,只需定义相应实体类,然后将待解析属性对应的元数据信息写到xml模板,再自动解析出待解析属性和对应属性值即可,开发人员无需再关心复杂的xml解析过程,无需书写大量重复代码进行数据解析。本技术实施例特别适合复杂的多层嵌套类型的xml文档解析为实体类,不用关注待解析属性的xpath路径信息,只要经过简单的标记即可由程序自动完成解析,开发效率得以大幅提升。
[0060]
基于同一发明构思,本技术实施例中还提供了与xml文档处理方法对应的xml文档处理装置,由于本技术实施例中的xml文档处理装置解决问题的原理与本技术实施例上述xml文档处理方法相似,因此xml文档处理装置的实施可以参见方法的实施,重复之处不再赘述。
[0061]
请参阅图3,图3为本技术实施例所提供的一种xml文档处理装置的结构示意图。如图3中所示,xml文档处理装置300包括:
[0062]
获取模块310,用于获取待解析xml文档及待解析xml文档中的至少一个待解析属性;
[0063]
标注模块320,用于确定待解析属性是否存在对应的类模板文档,若存在则对类模板文档进行标注;
[0064]
判断模块330,用于针对每个待解析属性,确定待解析属性对应的类模板文档的标注中是否存在对应的元数据;
[0065]
解析模块340,用于若存在,则基于对应元数据进行解析,以获取待解析属性对应的实体类对象。
[0066]
在一优选实施例中,标注模块320具体用于:针对每个待解析属性,确定该待解析属性对应的根属性节点;根据该根属性节点确定对应的实体类全路径名;根据该根属性节
点对应的实体类全路径名匹配对应的类模板文档。
[0067]
在一优选实施例中,标注模块320具体用于:根据待解析xml文档确定与该类模板文档相同类的元数据;将该元数据中的每个元数据的属性与类模板文档中的属性匹配,并生成对应的元数据映射表,元数据映射表的键为类模板文档的类名称,元数据映射表的键值为该类名称对应的元数据信息;其中,元数据信息包括元数据在类模板文档中的位置、元数据对应的类名称和元数据属性映射表。
[0068]
在一优选实施例中,元数据属性映射表的键为该元数据中每个元数据属性,键值为用于解析该元数据属性的元数据解析信息,其中,元数据解析信息包括该元数据属性的全路径名、该元数据属性的解析位置和该元数据属性的附加属性,元数据的附加属性为该元数据属性的子节点属性中的至少一个。
[0069]
在一优选实施例中,标注模块320还用于:将该元数据属性确定为目标属性节点;将该元数据属性对应的类名称确定为根属性节点;确定根属性节点至目标属性节点路径上的至少一个属性节点,并按顺序拼接以生成元数据的全路径名。
[0070]
在一优选实施例中,实体类对象包括目标类名称、多个目标属性和与目标属性对应的目标属性值,解析模块340具体用于:将该待解析属性对应的类模板文档的类名称确定为目标类名称;针对每个待解析属性,确定出该待解析属性对应的元数据属性;将该待解析属性和该待解析属性对应的元数据属性的附加属性,确定为多个目标属性;根据元数据属性映射表,确定每个目标属性对应的目标属性值。
[0071]
在一优选实施例中,解析模块340还用于:根据该目标属性对应的元数据属性,获取对应的元数据属性的解析位置;根据该元数据属性的解析位置,确定该目标属性对应的目标属性值。
[0072]
请参阅图4,图4为本技术实施例所提供的一种电子设备的结构示意图。如图4中所示,电子设备400包括处理器410、存储器420和总线430。
[0073]
存储器420存储有处理器410可执行的机器可读指令,当电子设备400运行时,处理器410与存储器420之间通过总线430通信,机器可读指令被处理器410执行时,可以执行如上述xml文档处理方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
[0074]
本技术实施例还提供一种计算机可读存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时可以执行如上述xml文档处理方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
[0075]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0076]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0077]
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络
单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0078]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0079]
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储器中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的存储器包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0080]
最后应说明的是:以上所述实施例,仅为本技术的具体实施方式,用以说明本技术的技术方案,而非对其限制,本技术的保护范围并不局限于此,尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本技术实施例技术方案的精神和范围,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1