CN109918540B - 一种xml文档解析方法、系统及电子设备和存储介质 - Google Patents
一种xml文档解析方法、系统及电子设备和存储介质 Download PDFInfo
- Publication number
- CN109918540B CN109918540B CN201910142644.7A CN201910142644A CN109918540B CN 109918540 B CN109918540 B CN 109918540B CN 201910142644 A CN201910142644 A CN 201910142644A CN 109918540 B CN109918540 B CN 109918540B
- Authority
- CN
- China
- Prior art keywords
- base class
- xml
- tag
- class
- parsing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种XML文档解析方法、系统及一种电子设备和计算机可读存储介质,该方法包括:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。本申请首先判断XML标签是否作为基类被继承,并进一步判断作为基类被继承的XML标签中内容的对象类型,从而根据对象类型动态地调用相应的解析函数,最终实现无论是基类对象还是派生类对象均能够被正确的解析。
Description
技术领域
本申请涉及计算机技术领域,更具体地说,涉及一种XML文档解析方法、系统及一种电子设备和一种计算机可读存储介质。
背景技术
现有技术中,利用c++解析XML文档时,原XML文档中出现的基类标记派生类数据的情况下,按照常规解析方式只能解析基类数据而无法完整解析派生类数据。
另外,还存在一种以抽象类机制为基础的解析方法,具体使用boost::serialization用基类指针转存派生类或者用BOOST_CLASS_EXPORT来实现。然而由于抽象类不能被实例化为可供使用的具体对象,从而造成XML文档中被声明为基类的对象无法被解析。
因此,如何确保基类对象和派生类对象均能被正确解析是本领域技术人员需要解决的问题。
发明内容
本申请的目的在于提供一种XML文档解析方法、系统及一种电子设备和一种计算机可读存储介质,能够确保基类对象和派生类对象均能被正确解析。
为实现上述目的,本申请提供了一种XML文档解析方法,包括:
获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
可选的,所述判断当前XML标签是否作为基类被继承,包括:
获取所述当前XML标签中定义的标签属性;
根据所述标签属性确定所述当前XML标签是否作为基类被继承。
可选的,所述判断当前XML标签是否作为基类被继承之后,还包括:
若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
可选的,当所述对象类型为派生类对象时,所述根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容,包括:
调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
可选的,所述调用预先创建的派生类解析函数,包括:
确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;
将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;
基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
可选的,还包括:
判断所有所述XML标签是否均解析完成;
如果否,则获取未解析XML标签并对其进行解析。
可选的,所述判断所有所述XML标签是否均解析完成之后,还包括:
若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
为实现上述目的,本申请提供了一种XML文档解析系统,包括:
标签判断模块,用于获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
类型判断模块,用于如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
内容解析模块,用于根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
可选的,所述标签判断模块,包括:
属性获取模块,用于获取所述当前XML标签中定义的标签属性;
标签确定模块,用于根据所述标签属性确定所述当前XML标签是否作为基类被继承。
可选的,还包括:
判断当前XML标签是否作为基类被继承之后,若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
可选的,所述内容解析模块,用于当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
可选的,所述内容解析模块,包括:
位置确定单元,用于确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;
指针替换单元,用于将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;
函数调用单元,用于基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
可选的,还包括:
解析判断模块,用于判断所有所述XML标签是否均解析完成;
标签解析模块,用于如果存在未解析完成的所述XML标签,则获取未解析XML标签并对其进行解析。
可选的,还包括:
结果保存模块,用于判断所有所述XML标签是否均解析完成之后,若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如前述公开的任一种所述XML文档解析方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述公开的任一种所述XML文档解析方法的步骤。
通过以上方案可知,本申请提供的一种XML文档解析方法,包括:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。本申请首先判断XML标签是否作为基类被继承,并进一步判断作为基类被继承的XML标签中内容的对象类型,从而根据对象类型动态地调用相应的解析函数,最终实现无论是基类对象还是派生类对象均能够被正确的解析。
本申请还公开了一种XML文档解析系统及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的一种XML文档解析方法的流程图;
图2为本申请实施例公开的另一种XML文档解析方法的流程图;
图3为本申请实施例公开的又一种XML文档解析方法的流程图;
图4为本申请实施例公开的一种具体的XML文档解析方法的流程图;
图5为本申请实施例公开的一种XML文档解析系统的结构图;
图6为本申请实施例公开的一种电子设备的结构图;
图7为本申请实施例公开的另一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在现有技术中,利用c++解析XML文档时,按照常规解析方式只能解析基类数据而无法完整解析派生类数据;以抽象类机制为基础的解析方法,由于抽象类不能被实例化为可供使用的具体对象,从而造成XML文档中被声明为基类的对象无法被解析。
因此,本申请实施例公开了一种XML文档解析方法,能够确保基类对象和派生类对象均能被正确解析。
参见图1,本申请实施例公开的一种XML文档解析方法的流程图,如图1所示,包括:
S101:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
本实施例中,首先获取XML文档,并从XML文档中的顶层标签开始逐层解析XML标签,并判断当前的XML标签是否作为基类被继承,也就是说,判断当前XML标签是否派生出别的标签类型。
在具体实施中,可以通过获取XML标签,并获取当前XML标签中定义的标签属性,从而根据所述标签属性确定所述当前XML标签是否作为基类被继承。例如,可以通过标签中“abstract="*"”来判断是否作为基类被继承,其中abstract="true"表示会被作为基类继承,abstract="false"则表示不会被作为基类继承。
S102:如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
进一步地,判断当前XML标签描述的内容属于何种对象类型,其中,对象类型包括基类对象和派生类对象。判断标准是查看当前XML标签是否存在xsi:type="***"属性项,其中该属性项的值***代表具体的某个派生类类型,如果存在该属性项,则说明该标签内容实际上属于***派生类对象类型。
S103:根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
可以理解的是,本实施例预先为基类对象和派生类对象编写了对应的解析函数,从而基于C++多态特性可以根据对象的类型动态的调用相应的函数,实现标签内容的解析。
通过以上方案可知,本申请提供的一种XML文档解析方法,包括:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。本申请首先判断XML标签是否作为基类被继承,并进一步判断作为基类被继承的XML标签中内容的对象类型,从而根据对象类型动态地调用相应的解析函数,最终实现无论是基类对象还是派生类对象均能够被正确的解析。
本申请实施例公开了另一种XML文档解析方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图2,本申请实施例提供的另一种XML文档解析方法的流程图,如图2所示,包括:
S201:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
S202:如果否,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象;
S203:如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
S204:当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象;
S205:当所述对象类型为基类对象时,调用所述基类解析函数,并利用所述基类解析函数解析所述基类对象。
本实施例中,在判断当前XML标签是否作为基类被继承之后,或判断当前XML标签中内容的对象类型之后,若当判断得到前XML标签未作为基类被继承,或当前XML标签中内容的对象类型为基类对象,则可调用预先创建的基类解析函数,从而利用基类解析函数解析基类对象,或可以采用现有技术中对于基类对象解析的常规解析方式得到解析结果。
本申请实施例公开了又一种XML文档解析方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图3,本申请实施例提供的又一种XML文档解析方法的流程图,如图3所示,包括:
S301:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
S302:如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
S303:当所述对象类型为派生类对象时,确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;
S304:将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;
S305:基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
在本实施例中,当确定当前XML标签作为基类被继承,并且当前XML标签中的内容为派生类时,需要调用相应的派生类解析函数来实现派生类对象的解析。C++多态特性可以实现以相同的方式处理不同类型的对象,即可以使用一段代码处理不同类型的对象,只要他们继承或实现了相同的类型从而不必为每一种类型的对象编写相同的逻辑,极大的提高了代码重用率。也就是说,多态性,允许将派生类类型的指针赋值给基类类型的指针,多态性在C++中是通过虚函数实现的。
具体地,获取定义基类对象和调用基类对象的位置,将该位置上定义的基类对象更改为基类指针,并根据对象类型为其分配相应的内存,从而可以利用基类指针实现派生类解析函数的动态调用。
可以理解的是,本申请实施例提供的XML文档解析方法还可以进一步包括:判断所有所述XML标签是否均解析完成;如果否,则获取未解析XML标签并对其进行解析。本实施例中,对每个XML标签解析完成后,均判断是否还存在未解析标签,若仍存在未解析标签,则获取未解析标签,并基于上述解析流程进一步对未解析标签进行解析,直至所有XML标签均解析完毕。
进一步地,在所有XML标签均解析完毕之后,本实施例还将XML文档的解析结果保存至C++与XML文档的顶层标签对应的类中。
本申请实施例公开了一种具体完整的XML文档解析方法,相对于上一实施例,本实施例对技术方案作了进一步详细的说明和优化。具体的:
参见图4,本申请实施例提供的一种具体的XML文档解析方法的流程图,如图4所示,包括:
步骤1,预先利用C++编码设计出所有能够与待解析XML文档中的各个XML标签一一对应的类,并从顶层XML标签开始逐个标签解析XML数据;
步骤2,每解析到一个XML标签,判断一下是否有其他标签将该XML标签作为基类继承,即该标签类型是否派生出别的标签类型;
步骤3,如果判断出当前XML标签没有被作为基类继承,则按照常规解析步骤解析当前XML标签;
步骤4,如果判断出当前XML标签被作为基类继承,则进一步判断该XML标签描述的内容从属于基类对象还是派生类对象;
步骤5,如果判断出当前XML标签内容描述基类对象,则按照常规解析步骤解析当前XML标签;
步骤6,如果判断出当前XML标签内容描述派生类对象,则修改代码按照新的解析方式解析:修改原始定义基类对象的上一级类型的数据结构,改为定义基类指针;修改基类解析函数,声明其为虚函数;
步骤7,将原始定义基类对象进行解析的地方,改为定义基类指针,根据标签内容描述的类型为其分配具体类型的内存,并使用基类指针调用解析函数解析当前XML标签;
步骤8,解析完当前XML标签之后,判断是否存在待解析的XML标签;
步骤9,如果判断出没有XML标签待解析,说明已经解析完毕,数据已经保存至C++类中对应XML文档最顶层标签的类中;
步骤10,如果判断出还有XML标签未解析,则返回步骤二解析下一个XML标签。
下面对本申请实施例提供的一种XML文档解析系统进行介绍,下文描述的一种XML文档解析系统与上文描述的一种XML文档解析方法可以相互参照。
参见图5,本申请实施例提供的一种XML文档解析系统的结构图,如图5所示,包括:
标签判断模块100,用于获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
类型判断模块200,用于如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
内容解析模块300,用于根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统中的标签判断模块可以包括:
属性获取模块,用于获取所述当前XML标签中定义的标签属性;
标签确定模块,用于根据所述标签属性确定所述当前XML标签是否作为基类被继承。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统还可以进一步包括:
判断当前XML标签是否作为基类被继承之后,若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统中的内容解析模块,具体可以用于:
当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统中的内容解析模块可以包括:
位置确定单元,用于确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;
指针替换单元,用于将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;
函数调用单元,用于基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统还可以进一步包括:
解析判断模块,用于判断所有所述XML标签是否均解析完成;
标签解析模块,用于如果存在未解析完成的所述XML标签,则获取未解析XML标签并对其进行解析。
在上述实施例的基础上,作为一种优选上述方式,所述XML文档解析系统还可以进一步包括:
结果保存模块,用于判断所有所述XML标签是否均解析完成之后,若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
本申请还提供了一种电子设备,参见图6,本申请实施例提供的一种电子设备的结构图,如图6所示,包括:
存储器11,用于存储计算机程序;
处理器12,用于执行所述计算机程序时可以实现上述实施例所提供的任一种XML文档解析方法的步骤。
具体的,存储器11包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令,该内存储器为非易失性存储介质中的操作系统和计算机可读指令的运行提供环境。处理器12在一些实施例中可以是一中央处理器(CentralProcessing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,为电子设备提供计算和控制能力,执行所述存储器11中保存的计算机程序时,可以实现以下步骤:
获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:获取所述当前XML标签中定义的标签属性;根据所述标签属性确定所述当前XML标签是否作为基类被继承。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:判断当前XML标签是否作为基类被继承之后,若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:判断所有所述XML标签是否均解析完成;如果否,则获取未解析XML标签并对其进行解析。
优选的,所述处理器12执行所述存储器11中保存的计算机子程序时,可以实现以下步骤:判断所有所述XML标签是否均解析完成之后,若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
在上述实施例的基础上,作为优选实施方式,参见图7,所述电子设备还包括:
输入接口13,与处理器12相连,用于获取外部导入的计算机程序、参数和指令,经处理器12控制保存至存储器11中。该输入接口13可以与输入装置相连,接收用户手动输入的参数或指令。该输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是键盘、触控板或鼠标等。
显示单元14,与处理器12相连,用于显示处理器12处理的数据以及用于显示可视化的用户界面。该显示单元14可以为LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。
网络端口15,与处理器12相连,用于与外部各终端设备进行通信连接。该通信连接所采用的通信技术可以为有线通信技术或无线通信技术,如移动高清链接技术(MHL)、通用串行总线(USB)、高清多媒体接口(HDMI)、无线保真技术(WiFi)、蓝牙通信技术、低功耗蓝牙通信技术、基于IEEE802.11s的通信技术等。
图7仅示出了具有组件11-15的电子设备,本领域技术人员可以理解的是,图7示出的结构并不构成对电子设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本申请还提供了一种计算机可读存储介质,该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:获取所述当前XML标签中定义的标签属性;根据所述标签属性确定所述当前XML标签是否作为基类被继承。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:判断当前XML标签是否作为基类被继承之后,若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:判断所有所述XML标签是否均解析完成;如果否,则获取未解析XML标签并对其进行解析。
优选的,所述计算机可读存储介质中存储的计算机子程序被处理器执行时,具体可以实现以下步骤:判断所有所述XML标签是否均解析完成之后,若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
通过以上方案可知,本申请提供的一种XML文档解析方法,包括:获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容。本申请首先判断XML标签是否作为基类被继承,并进一步判断作为基类被继承的XML标签中内容的对象类型,从而根据对象类型动态地调用相应的解析函数,最终实现无论是基类对象还是派生类对象均能够被正确的解析。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种XML文档解析方法,其特征在于,包括:
获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容;其中,所述根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容包括:当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象;当所述对象类型为基类对象时,调用所述基类解析函数,并利用所述基类解析函数解析所述基类对象。
2.根据权利要求1所述的XML文档解析方法,其特征在于,所述判断当前XML标签是否作为基类被继承,包括:
获取所述当前XML标签中定义的标签属性;
根据所述标签属性确定所述当前XML标签是否作为基类被继承。
3.根据权利要求1所述的XML文档解析方法,其特征在于,所述判断当前XML标签是否作为基类被继承之后,还包括:
若所述当前XML标签未作为基类被继承,则调用预先创建的基类解析函数,并利用所述基类解析函数解析所述当前XML标签中的基类对象。
4.根据权利要求1所述的XML文档解析方法,其特征在于,当所述对象类型为派生类对象时,所述根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容,包括:
调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象。
5.根据权利要求4所述的XML文档解析方法,其特征在于,所述调用预先创建的派生类解析函数,包括:
确定所述当前XML标签中用于调用基类对象的第一位置和所述当前XML标签的上一级标签中用于定义所述基类对象的第二位置;
将所述第一位置和所述第二位置的所述基类对象均替换为基类指针;其中,对所述第一位置的所述基类对象进行替换时,为所述基类指针分配派生类类型的内存;
基于C++多态特性利用所述基类指针动态调用所述派生类解析函数。
6.根据权利要求1所述的XML文档解析方法,其特征在于,还包括:
判断所有所述XML标签是否均解析完成;
如果否,则获取未解析XML标签并对其进行解析。
7.根据权利要求6所述的XML文档解析方法,其特征在于,所述判断所有所述XML标签是否均解析完成之后,还包括:
若所有所述XML标签均解析完成,则将解析结果保存至与XML顶层标签对应的类中。
8.一种XML文档解析系统,其特征在于,包括:
标签判断模块,用于获取可扩展标记语言XML标签,并判断当前XML标签是否作为基类被继承;
类型判断模块,用于如果是,则判断所述当前XML标签中内容的对象类型;其中,所述对象类型包括基类对象和派生类对象;
内容解析模块,用于根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容;其中,所述根据所述对象类型调用对应的预先创建的解析函数,并利用所述解析函数解析所述当前XML标签的内容包括:当所述对象类型为派生类对象时,调用预先创建的派生类解析函数,并利用所述派生类解析函数解析所述派生类对象;当所述对象类型为基类对象时,调用所述基类解析函数,并利用所述基类解析函数解析所述基类对象。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述XML文档解析方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述XML文档解析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910142644.7A CN109918540B (zh) | 2019-02-26 | 2019-02-26 | 一种xml文档解析方法、系统及电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910142644.7A CN109918540B (zh) | 2019-02-26 | 2019-02-26 | 一种xml文档解析方法、系统及电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109918540A CN109918540A (zh) | 2019-06-21 |
CN109918540B true CN109918540B (zh) | 2023-04-21 |
Family
ID=66962367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910142644.7A Active CN109918540B (zh) | 2019-02-26 | 2019-02-26 | 一种xml文档解析方法、系统及电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918540B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110263222B (zh) * | 2019-06-25 | 2023-06-02 | 深圳市元征科技股份有限公司 | 一种数据获取方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102651019A (zh) * | 2012-03-30 | 2012-08-29 | 奇智软件(北京)有限公司 | 一种标记文件解析方法和装置 |
CN103577578A (zh) * | 2012-03-30 | 2014-02-12 | 奇智软件(北京)有限公司 | 一种标记文件解析方法和装置 |
US8683318B1 (en) * | 2004-07-14 | 2014-03-25 | American Express Travel Related Services Company, Inc. | Methods and apparatus for processing markup language documents |
CN106293862A (zh) * | 2015-06-25 | 2017-01-04 | 中国移动通信集团山东有限公司 | 一种可扩展标记语言xml数据的解析方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100388269C (zh) * | 2003-03-27 | 2008-05-14 | 国际商业机器公司 | 用于优化基于标签的协议流分析的系统和方法 |
-
2019
- 2019-02-26 CN CN201910142644.7A patent/CN109918540B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8683318B1 (en) * | 2004-07-14 | 2014-03-25 | American Express Travel Related Services Company, Inc. | Methods and apparatus for processing markup language documents |
CN102651019A (zh) * | 2012-03-30 | 2012-08-29 | 奇智软件(北京)有限公司 | 一种标记文件解析方法和装置 |
CN103577578A (zh) * | 2012-03-30 | 2014-02-12 | 奇智软件(北京)有限公司 | 一种标记文件解析方法和装置 |
CN106293862A (zh) * | 2015-06-25 | 2017-01-04 | 中国移动通信集团山东有限公司 | 一种可扩展标记语言xml数据的解析方法和装置 |
Non-Patent Citations (2)
Title |
---|
基于SAX的XML文档解析和存储技术应用;田斌等;《微机发展》;20050310(第03期);全文 * |
用C++语言实现XML文件解析的一种方案;周宇等;《光通信研究》;20080810(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109918540A (zh) | 2019-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220318336A1 (en) | Method and Terminal Device for Extracting Web Page Content | |
CN108399072B (zh) | 应用页面更新方法和装置 | |
CN101526963A (zh) | 网页编码识别方法、装置和终端设备 | |
CN108874760A (zh) | 报表文件生成方法、装置、计算机设备及存储介质 | |
WO2013154550A1 (en) | User interface content personalization system | |
CN109145235B (zh) | 用于解析网页的方法、装置及电子设备 | |
CN108197024B (zh) | 嵌入式浏览器调试方法、调试终端及计算机可读存储介质 | |
CN110555073A (zh) | 一种数据处理方法、装置及电子设备和存储介质 | |
CN109918540B (zh) | 一种xml文档解析方法、系统及电子设备和存储介质 | |
CN110018944A (zh) | 服务器sensor配置方法、系统及设备和存储介质 | |
CN113672504A (zh) | 一种智能设备测试方法、装置、设备以及存储介质 | |
CN105630489A (zh) | 数据处理方法和数据处理装置 | |
WO2017067459A1 (zh) | 一种桌面数据加载方法及装置 | |
CN111782717A (zh) | 一种数据处理方法、系统及电子设备和存储介质 | |
CN111651221A (zh) | 注解国际化方法及装置、存储介质及电子设备 | |
CN109240660B (zh) | 一种广告数据的接入方法、存储介质、电子设备及系统 | |
CN107977459B (zh) | 报表生成方法及装置 | |
CN107301207B (zh) | 一种解析xml的方法及装置 | |
CN112000644B (zh) | 一种数据处理方法、系统及电子设备和存储介质 | |
CN112800373B (zh) | 网页资源数据生成方法、装置、计算机设备及存储介质 | |
CN112905931B (zh) | 页面信息的展示方法、装置、电子设备及存储介质 | |
CN111125567B (zh) | 设备标记方法、装置、电子设备及存储介质 | |
CN110244948B (zh) | 基于编程语言对按钮状态进行切换的方法以及电子设备 | |
CN112269635A (zh) | 一种功能模块配置方法、系统及电子设备和存储介质 | |
CN110187881A (zh) | 一种异形窗口创建方法、系统、装置及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |