背景技术
XML(Extensible Markup Language)即可扩展标记语言,是一种受到广泛支持的Internet标准,用于以一种特殊的方式编码结构化数据,实际上,以XML编码的数据可以通过任何编程语言解码,人们甚至可以使用标准的文本编辑器来阅读或编写XML数据。许多应用程序,尤其是兼容现代标准的Web浏览器,可以直接处理XML数据。
XML Schema文件用于描述XML文档的结构。XML Schema语言也被称为XML Schema Definition(XSD)。XML Schema的作用是定义一份XML文档的一个或多个合法组件,它定义了可以出现在文档里的元素(Element)、可以出现在元素里的属性、哪些元素是子元素、子元素的顺序、子元素的数量、元素和属性的数据类型等内容。
作为一个基于文本的标准,XML形式的数据非常适合作为程序配置数据或者在客户机和服务器系统之间交换数据,大部分数据(文件路径、描述、地址、名称等)已经是基于文本的数据。
发明人经过对现有XML处理方式的研究发现,现有XML处理方式存在以下问题:
1)单纯的文本结构的数据对于开发人员来说处理起来并不友好,如:类型、格式等转换;
2)XML数据解析工作于业务逻辑处理相耦合,导致软件复杂度直线上升,并增加出现错误的几率;
3)繁杂的XML解析工具API无疑提升了学习曲线和开发的成本;
4)数据结构的改变直接导致程序大量修改。
发明内容
为解决上述技术问题,本申请实施例提供一种将XML元数据解析成数据对象的方法,将XML元数据解析成Java类,以更好的对XML数据元素进行处理。
技术方案如下:
一种XML元数据对象化解析方法,在执行所述解析方法前,对XML数据结构的XML Schema进行预定义,所述预定义过程为:预先在XML Schema中定义元素的属性名称、类型、默认值及父子元素关联关系;在所述XMLSchema预定义结束后,执行所述解析方法,包括:
依据所述XML Schema对XML数据中的数据元素进行定义,包括定义与所述数据元素结构一致的数据对象,所述数据对象的关联关系与所述数据元素的关联关系一致;
读取所述XML数据并对所述XML数据进行解析;
实例化所述XML数据对应的数据对象,形成与所述XML数据结构相同的数据对象。
上述的方法,优选的,依据所述XML Schema对所述XML数据中的数据元素进行定义的过程,还包括对数据对象接口的定义,所述数据对象接口用于获取所述XML数据元素的属性信息。
上述的方法,优选的,对所述XML数据进行解析的过程包括:将所述XML数据中XML数据元素的XML Schema类型为any的元素解析成与所述数据对象接口类型一致的数据类型。
一种XML元数据对象化解析系统,包括:预设单元、定义单元、解析单元和实例化单元;
其中:所述预设单元用于对XML数据结构的XML Schema进行预定义;所述预定义过程为:预先在XML Schema中定义元素的属性名称、类型、默认值及父子元素关联关系;
所述定义单元用于依据所述预设单元预设的XML Schema对XML数据中的数据元素进行定义,包括定义与所述数据元素结构一致的数据对象,所述数据对象的关联关系与所述数据元素的关联关系一致;
所述解析单元用于读取所述定义单元定义的XML数据,并对所述XML数据进行解析;
所述实例化单元用于实例化所述解析单元解析的XML数据对应的数据对象,形成与所述XML数据结构相同的数据对象。
上述的系统,优选的,所述定义单元依据所述预设单元预设的XMLSchema对所述XML数据中的数据元素进行定义的过程还包括对数据对象接口的定义,所述数据对象接口用于获取所述XML数据元素的属性信息。
上述的系统,优选的,所述解析单元对所述XML数据进行解析的过程包括:将所述XML数据中的XML数据元素的XML Schema类型为any的元素解析成与所述数据对象接口类型一致的数据类型。
由以上本申请实施例提供的技术方案可见,本发明提供的XML元数据对象化解析方法及系统,预先定义XML数据结构的XML Schema,XML Schema定义了每个元素的属性名称、类型、默认值、父子元素关联关系等,本申请实施例直接使用这些数据建立对应的Java类型,解决了现有XML处理方式中存在的问题。
具体实施方式
本申请实施例提供一种XML元数据对象化解析方法及系统,将XMLSchema定义的XML数据中的每一个元素转译成Java类,并在系统中用XMLSchema的命名空间和节点名称记录元素与类型的对应关系。XML Schema定义了每个元素的属性名称、类型、默认值、父子元素关联关系等,本申请实施例直接使用这些数据建立对应的Java类型,这些类型与对应元素有相同的属性名称、类型、默认值、父子元素关联关系等并定义属性的getter、setter方法,这样就能够让符合XML Schema定义的XML数据转变成Java对象。
以上是本申请的核心思想,为了使本技术领域的人员更好地理解本申请方案。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
本申请实施例公开的一种XML元数据对象化解析方法在执行该方法前,对XML数据结构的XML Schema进行预定义,预定义过程结束后,执行所述XML元数据对象化解析方法。
本申请实施例公开的一种XML元数据对象化解析方法的流程图如图1所示,包括:
步骤S101:依据XML Schema对XML数据中的数据元素进行定义,包括定义与上述数据元素结构一致的数据对象,上述数据对象的关联关系与所述数据元素的关联关系一致;
步骤S102:读取上述XML数据并对上述XML数据进行解析;
步骤S103:实例化上述XML数据对应的数据对象,形成与上述XML数据结构相同的数据对象。
需要对以上步骤进行说明的是:
根据XML Schema定义一个统一的数据操作接口和与XML Schema中的元素结构一致的数据对象,这些数据对象的关联关系与元素的关联关系一致。
从XML数据源读入XML数据,XML数据源中包括文件系统、网络环境中指定的URL、使用各种协议通信的系统等。
解析XML数据,实例化每个XML元素对应的数据对象,形成与XML数据层次结构相同的数据对象。
本申请实施例公开的XML元数据对象化解析方法中,依据XML Schema对XML数据中的数据元素进行定义的过程,还包括对数据对象接口的定义,上述数据对象接口用于获取XML数据元素的属性信息。
定义统一的数据对象接口,所有的数据对象都扩展相同接口,这个接口只用于通用的数据操作,比如获取本元素指定名称的属性值、获取所有子元素等。
本申请实施例公开的XML元数据对象化解析方法中,对XML数据进行解析的过程包括:将XML数据中XML数据元素的XML Schema类型为any的元素解析成与所述数据对象接口类型一致的数据类型。
对于在XML Schema中,XML Schema类型为any的元素,其对应的XML数据会解析成统一的数据对象接口的类型,这样即便没有具体的数据对象与该XML数据对应,系统也可以操作或者读取该XML数据。
本申请实施例公开的XML元数据对象化解析方法的详细流程图如图2所示,包括:
步骤S201:解析方法开始;
步骤S202:加载XML数据流;
步骤S203:解析根元素,实例化根元素对应数据对象;
步骤S204:检查当前根元素是否有子元素,有,执行步骤S205;否则,执行步骤S209;
步骤S205:解析子元素名称、命名空间;
步骤S206:子元素是否有与其对应的数据对象;有,执行步骤S207;否则,执行步骤S208;
步骤S207:实例化对应的对象,建立两个节点(父节点与子节点)的父子关系;然后返回执行步骤S204;
步骤S208:实例化通用数据对象,建立两个元素的父子关系;然后返回执行步骤S204;
步骤S209:填充数据对象的属性;
步骤S210:返回树形结构的数据对象;
步骤S211:解析方法结束。
本申请实施例公开的XML数据结构的XML Schema定义与对象化数据类型的对应关系图如图3所示,其对应关系为根节点元素对应根类型,子节点元素对应子类型,未定义的元素对应扩展类型。
本申请实施例公开的一种XML元数据对象化解析系统的系统结构图如图4所示,包括:预设单元301、定义单元302、解析单元303和实例化单元304;
其中:预设单元301用于对XML数据结构的XML Schema进行预定义;
定义单元302用于依据预设单元301预设的XML Schema对XML数据中的数据元素进行定义,包括定义与所述数据元素结构一致的数据对象,上述数据对象的关联关系与所述数据元素的关联关系一致;
解析单元303用于读取定义单元302定义的XML数据,并对上XML数据进行解析;
实例化单元304用于实例化解析单元303解析的XML数据对应的数据对象,形成与上述XML数据结构相同的数据对象。
本申请实施例公开的系统中,定义单元302依据预设单元301预设的XMLSchema对XML数据中的数据元素进行定义的过程还包括对数据对象接口的定义,数据对象接口用于获取上述XML数据元素的属性性信息。
本申请实施例公开的系统中,解析单元303对XML数据进行解析的过程包括:将XML数据中的XML数据元素的XML Schema类型为any的元素解析成与所述数据对象接口类型一致的数据类型。
本申请实施例公开的XML元数据对象化解析方法及系统具有以下优点:
高可用性:
待解析的XML数据都有事先定义好的XML Schema,只要是符合系统指定XML Schema的XML数据都可以解析成为程序能够识别的数据对象。
将XML解析工作解耦:
使用元数据编程的开发人员无需关心XML数据的解析工作,直接使用已经填充数据的对象,从而无需了解XML相关细节,降低程序复杂度。
对修改XML数据结构开发:
任何XML Schema的修改,只需要修改对应节点的数据类型和节点与类型的映射关系即可,程序本身无需做过大改动。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。