一种基于QT自动生成代码的方法及装置与流程

专利2022-06-29  71


本发明涉及可扩展标记语言领域,尤其涉及一种基于qt自动生成代码的方法。



背景技术:

可扩展标记语言即extensiblemarkuplanguage,简称xml,是一种用于标记电子文件使其具有结构性的标记语言,它提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,使用纯文本来描述数据内容,简单易懂,并且数据都结构化了,易于计算机理解,使xml很快成为跨平台、跨应用数据交换的公共语言,xsd即xmlschemadefinition的作用是定义xml文档的合法结构,它定义了可出现在xml文档中的元素、属性、继承关系,以及出现的次序、次数、数据类型等。



技术实现要素:

本发明提供的一种基于qt自动生成代码的方法,旨在解决现有技术中手工编写对应xml文件的转换代码的问题。

为实现上述目的,本发明采用以下技术方案:

本发明的一种基于qt自动生成代码的方法,包括:

输入符合规范的xsd文件并定义xml文件的架构;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

本发明提供的一种基于qt自动生成代码的方法,通过解析xsd文件中的各种元素,然后生成对应的element哈希表,得到xsd文件对应的element哈希表以后,对于简单类型提供对字符串、日期、数值、布尔型的支持,直接生成对应qt类型的成员变量;对于复合类型能够生成对应的类并且在父类型中生成对应成员变量及属性方法;对于生成的list类型成员变量,将会使用q_classinfo来记录信息,在生成的代码内对其进行特殊处理,提高效率和准确性。

作为优选,所述解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量包括:

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性。

作为优选,所述生成的类型根据父子继承关系进行确定。

一种基于qt自动生成代码的装置,其特征在于,包括:

输入和定义模块,用于输入符合规范的xsd文件并定义xml文件的架构;

解析和生成模块,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别和生成模块,用于识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

记录和生成模块,用于通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

作为优选,所述解析和生成模块包括:

解析和支持单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析和生成单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性。

一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如上述中任一项所述的一种基于qt自动生成代码的方法。

一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述中任一项所述的一种基于qt自动生成代码的方法。

本发明具有如下有益效果:

本发明提供的一种基于qt自动生成代码的方法,只要给定一个合规的xsd文档,就能够生成对应的c 类,将符合该c 类定义的xml文件自动实例化,使xml文件转换为一个普通c 对象实例,易于计算机操作使用。它自动识别xsd中各元素的继承关系,免除了手工编写对应xml文件的转换代码的工作,提高了工作效率。

附图说明

图1是本发明实施例实现一种基于qt自动生成代码的方法流程图。

具体实施方式

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

在介绍本发明技术方案之前,示例性的介绍一种本发明技术方案可能适用的场景。

示例性的:可扩展标记语言是一种用于标记电子文件使其具有结构性的标记语言,它提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,使用纯文本来描述数据内容,简单易懂,并且数据都结构化了,易于计算机理解,使xml很快成为跨平台,跨应用数据交换的公共语言,xsd即xmlschemadefinition,其作用是定义xml文档的合法结构,它定义了可出现在xml文档中的元素、属性、继承关系、出现的次序、次数、数据类型等,目前按照xml文件逐一定义相应的类仍是一件比较繁琐的事。

实施例1

如图1所示,一种基于qt自动生成代码的方法,包括:

s100、输入符合规范的xsd文件并定义xml文件的架构;

s110、解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

s120、识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

s130、通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

根据实施例1可知,本发明通过解析xsd文件中的各种元素,然后生成对应的element哈希表,得到xsd文件对应的element哈希表以后,对于简单类型提供对字符串、日期、数值、布尔型的支持,直接生成对应qt类型的成员变量;对于复合类型能够生成对应的类,并在父类型中生成对应成员变量及属性方法;对于生成的list类型成员变量,将会使用q_classinfo记录信息,在生成的代码内对其进行特殊处理,免除了手工编写对应xml文件的转换代码的工作,提高了工作效率和准确性。

实施例2

一种基于qt自动生成代码的方法,包括:

输入符合规范的xsd文件并定义xml文件的架构;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性;

识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

根据实施例2可知,只要给定一个合规的xsd文档,就能够生成对应的c 类,将符合该c 类定义的xml文件自动实例化,使xml文件转换为一个普通c 对象实例,易于计算机操作使用,同时它自动识别xsd中各元素的继承关系,免除了手工编写对应xml文件的转换代码的工作,提高了工作效率。

实施例3

一种基于qt自动生成代码的方法,包括:

输入符合规范的xsd文件并定义xml文件的架构;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

所述生成的类型根据父子继承关系进行确定。

根据实施例3可知,本发明只要给定一个合规的xsd文档,就能够生成对应的c 类,将符合该c 类定义的xml文件自动实例化,使xml文件转换为一个普通c 对象实例,易于计算机操作使用,并且能够自动识别xsd中各元素的继承关系,免除了手工编写对应xml文件的转换代码的工作,提高了工作效率。

实施例4

一种基于qt自动生成代码的方法,包括:

针对需要处理的xml文件使用工具,比如microsoftxml架构、数据类型支持实用工具xsd.exe,生成对应的xsd文件并确认xsd文件中对xml文件的结构定义的准确性;

对xsd文件进行解析,解析所有的element元素及其子节点;

对解析结果进行处理,形成与xsd文件对应的element哈希表;

对得到的element哈希表进行处理,对每一个独立的复合类型的element元素生成对应的c 类,按照c 语言的通用做法,生成对应的头文件(.h)和源代码文件(.cpp)。

在对xsd文件进行解析的时候,本方法会处理所有在根节点下的所有element、group、attributegroup、complextype、节点,其中group、attributegroup节点内容不会生成对应类,而是会在被引用的时候,在对应的节点内展开,element、complextype节点则会生成对应的类,在element节点下面的element,complextype节点也会被处理,并且会保留继承关系。

在处理element哈希表时会检查继承关系是否合法,是否未定义的引用的类型等。

在上述步骤完成后,对需要生成类的element元素分别生成对应的头文件和源文件。

实施例5

一种基于qt自动生成代码的装置,包括:

输入和定义模块,用于输入符合规范的xsd文件并定义xml文件的架构;

解析和生成模块,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别和生成模块,用于识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

记录和生成模块,用于通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

一种可选择的实施方式,输入和定义模块输入符合规范的xsd文件并定义xml文件的架构,解析和生成模块解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量,识别和生成模块识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码,记录和生成模块通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

实施例6

一种基于qt自动生成代码的装置,包括:

输入和定义模块,用于输入符合规范的xsd文件并定义xml文件的架构;

解析和支持单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析和生成单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性;

识别和生成模块,用于识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

记录和生成模块,用于通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

一种可选择的实施方式,输入和定义模块输入符合规范的xsd文件并定义xml文件的架构,解析和支持单元解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持,解析和生成单元解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性,识别和生成模块识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码,记录和生成模块通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

实施例8

一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述的一种基于qt自动生成代码的方法。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述的一种基于qt自动生成代码的方法。

示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器中,并由处理器执行,以完成本发明。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在计算机设备中的执行过程。

计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可包括,但不仅限于,存储器、处理器。本领域技术人员可以理解,本实施例仅仅是计算机设备的示例,并不构成对计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备还可以包括输入输出设备、网络接入设备、总线等。

处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-program503mablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器可以是计算机设备的内部存储单元,例如计算机设备的硬盘或内存。存储器也可以是计算机设备的外部存储设备,例如计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器还可以既包括计算机设备的内部存储单元也包括外部存储设备。存储器用于存储计算机程序以及计算机设备所需的其他程序和数据。存储器还可以用于暂时地存储已经输出或者将要输出的数据。

以上所述仅为本发明的具体实施例,但本发明的技术特征并不局限于此,任何本领域的技术人员在本发明的领域内,所作的变化或修饰皆涵盖在本发明的专利范围之中。


技术特征:

1.一种基于qt自动生成代码的方法,其特征在于,包括以下步骤:

输入符合规范的xsd文件并定义xml文件的架构;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

2.根据权利要求1所述的一种基于qt自动生成代码的方法,其特征在于,所述解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量包括:

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性。

3.根据权利要求1所述的一种基于qt自动生成代码的方法,其特征在于,所述生成的类型根据父子继承关系进行确定。

4.一种基于qt自动生成代码的装置,其特征在于,包括:

输入和定义模块,用于输入符合规范的xsd文件并定义xml文件的架构;

解析和生成模块,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成对应的类属性和成员变量;

识别和生成模块,用于识别所述xsd文件中的指示器,将xsd文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码;

记录和生成模块,用于通过q_classinfo记录生成的列表类型成员变量元素,生成头文件和源代码文件。

5.根据权利要求4所述的一种基于qt自动生成代码的装置,其特征在于,所述解析和生成模块包括:

解析和支持单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成简单类型则提供对字符串、日期、数值、布尔型的支持;

解析和生成单元,用于解析所述xsd文件,根据所述xsd文件中对xml文件的约束生成复合类型则生成对应的类型并在父类型中生成对应成员变量和属性。

6.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1~3中任一项所述的一种基于qt自动生成代码的方法。

7.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序使计算机执行时实现如权利要求1~3中任一项所述的一种基于qt自动生成代码的方法。

技术总结
本发明公开了一种基于QT自动生成代码的方法,包括输入符合规范的XSD文件并定义XML文件的架构,解析所述XSD文件,根据所述XSD文件中对XML文件的约束生成对应的类属性和成员变量,识别所述XSD文件中的指示器,将XSD文件中的所有element元素根据文件结构生成相应的element哈希表,将所述element元素根据是否复合结构、最小出现次数、最大出现次数生成相应的代码,通过Q_CLASSINFO记录生成的列表类型成员变量元素,生成头文件和源代码文件。该方法解决了现有技术中手工编写对应XML文件的转换代码的工作,存在效率低下的问题。

技术研发人员:王宏明;林卫永;聂超;金云;王泉荣;温业中
受保护的技术使用者:通号万全信号设备有限公司
技术研发日:2020.01.17
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-29690.html

最新回复(0)