CN101436185B - 一种利用xml内存树实现多种文件兼容的方法 - Google Patents

一种利用xml内存树实现多种文件兼容的方法 Download PDF

Info

Publication number
CN101436185B
CN101436185B CN200710177203.8A CN200710177203A CN101436185B CN 101436185 B CN101436185 B CN 101436185B CN 200710177203 A CN200710177203 A CN 200710177203A CN 101436185 B CN101436185 B CN 101436185B
Authority
CN
China
Prior art keywords
file
xml
node
data
memory tree
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.)
Expired - Fee Related
Application number
CN200710177203.8A
Other languages
English (en)
Other versions
CN101436185A (zh
Inventor
余忠华
魏超鹏
阎国龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New Founder Holdings Development Co ltd
Beijing Founder Electronics Co Ltd
Original Assignee
Peking University Founder Group Co Ltd
Beijing Founder Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University Founder Group Co Ltd, Beijing Founder Electronics Co Ltd filed Critical Peking University Founder Group Co Ltd
Priority to CN200710177203.8A priority Critical patent/CN101436185B/zh
Publication of CN101436185A publication Critical patent/CN101436185A/zh
Application granted granted Critical
Publication of CN101436185B publication Critical patent/CN101436185B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)

Abstract

本发明涉及一种利用XML内存树实现多种文件兼容的方法,属于计算机印刷排版技术领域。现有的文件兼容方法大部分是基于二进制流进行文件兼容的,通过对二进制格式进行解析直接生成新格式的文档。如果需要对多种文件进行兼容则需要多个解析模块,并且包含类似的转换代码。本发明所述的方法通过引入XML内存树作为中间结构,然后仅仅对这种XML结构进行兼容。采用本发明所述的方法,可以方便的对多种文档结构进行兼容,同时也能够实现低版本程序对高版本程序制作的文件的兼容。

Description

一种利用XML内存树实现多种文件兼容的方法
技术领域
本发明属于计算机印刷排版技术领域,具体涉及一种利用XML内存树实现多种文件兼容的方法。
背景技术
随着计算机软件的发展,许多的软件都不可避免的进行不断的升级,有些是一些对文件结构影响不大的变更,有些却是根本的变化。由于软件升级过程中需要兼容早期版本制作的文件。所谓文件兼容,是指使用当前程序能够打开第三方程序或者该程序早期版本制作的文件,以保障用户对已有资源的可重用性。
目前的文件兼容的方法主要是:基于二进制流进行文件兼容的,通过对二进制格式进行解析直接生成新格式的文档。如果需要对多种文件进行兼容则需要多个解析模块,并且包含类似的转换代码。
发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种可以方便地对多种文档结构进行兼容,同时也能够实现低版本程序对高版本程序制作的文件的进行兼容的方法。
为达到以上目的,本发明采用的技术方案是:一种利用XML内存树实现多种文件兼容的方法,包括如下步骤:
(1)针对当前程序中所有需要保存的数据内容定义一个完整Schema,首先需要分析当前程序中所有需要存储到文档中的数据,按照程序中数据的层次结构定义具有相同层次结构的Schema,以DocRoot节点作为文档的根节点,对于程序中复杂的数据定义为Schema中的一个节点,对于程序中简单的数据定义为Schema中的节点的属性,另外还需要结合数据的语义来最终确定程序中的数据是作为Schema中的节点还是属性;
(2)按照步骤(1)中得到Schema定义一系列的数据结构,即对于Schema中的每一个节点定义一个数据结构,对于所有的属性都定义到相应数据结构中的成员变量;
(3)将需要兼容的文件转换成步骤(2)中的数据结构,形成树型数据结构即XML内存树结构;
(4)将步骤(3)中生成的XML内存树结构导入到当前程序中,从而实现文件的兼容。
进一步,步骤(3)中,如果要兼容Office文件,则利用微软提供的API函数把Office文档中的各个部分转换生成步骤(2)中的各个数据结构,同时将各个对象挂接到各自所属的父节点之下,形成一棵XML内存树结构。
进一步,步骤(3)中,如果要兼容早期版本的历史文件,则先把这种历史文件按照自己的数据格式直接输出一个XML文件,然后通过DOM和XSLT技术把这个XML文件转换成符合步骤(1)中要求的标准XML文件,最后再通过步骤(2)中各个数据结构的解析器解析代码,生成对应的XML内存树结构。
进一步,步骤(3)中,如果要实现低版本程序兼容高版本程序制作的XML文件,则直接读入该XML文件,然后通过步骤(2)中各个数据结构的解析器解析代码,生成对应的XML内存树结构。
进一步,步骤(4)中,将XML内存树结构导入到当前程序中的方法包括以下步骤:
首先,针对文件的每个部分构建一个导入引擎ImportEngine,所述的导入引擎ImportEngine一方面要导入对应节点的属性,另一方面还要完成其子节点的导入,如果子节点是简单节点就直接导入,如果是复杂节点,就需要调用该子节点的导入引擎;
然后,从根节点DocRoot开始调用DocRoot的导入引擎DocRootImportEngine的Import()函数,该函数中首先完成该节点的属性导入,然后调用ImportChildren(),实现导入引擎的递归调用;
最后,各个节点的Import()函数,主要是完成程序中与该节点对应的对象的创建及其属性的设置,同时需要设置好新创建的对象与其父对象的关联关系,然后就是调用ImportChildren()函数从而实现整个文档数据的导入。
进一步,在实现低版本程序兼容高版本程序制作的文件的过程中,在进行步骤(2)之前先将高版本程序中的当前文档导出生成一个标准XML文件。
本发明的效果在于:采用本发明的方法,可以方便的对多种文档结构进行兼容,也能够实现低版本程序对高版本程序制作的文件的兼容,同时也最大程度的重用代码,对未来需要兼容新的第三方文件也具有良好的扩展性。
附图说明
图1是本发明所述具体实施方式中的数据流转示意图;
图2是一个XML Schema数据结构的简单示意图;
图3是本发明所述方法的流程图。
具体实施方式
下面结合附图及具体实施对本发明作进一步详细说明:
如图1和图3所示,一种利用XML内存树实现多种文件兼容的方法,包括如下步骤:
(1)针对当前程序中所有需要保存的数据内容(包括程序环境设置)定义一个完整Schema(步骤S31),这个Schema就是后续生成标准XML的规范。所谓完整就是要求对所有需要存储的数据定义到Schema中。
定义一个完整的Schema,首先需要分析当前程序中所有需要存储到文档中的数据,按照程序中数据的层次结构定义具有相同层次结构的Schema,以DocRoot节点作为文档的根节点,对于程序中复杂的数据定义为Schema中的一个节点,对于程序中简单的数据定义为Schema中的节点的属性,另外还需要结合数据的语义来最终确定程序中的数据是作为Schema中的节点还是属性。定义后的Schema的简单示意图如图2所示。
XML Schema是用来描述和约束XML文档的一种XML语言,从功能上看,它和早期的DTD是非常类似的,但是它比DTD的更加强大。
本实施例中,文档对象Cv_Doc是一个复杂数据类型,对应定义上述定义的Schema是以DocRoot节点作为文档的根节点,version是Cv_Doc的一个属性,对应定义为DocRoot节点的一个属性,Cv_Doc下一级是Cv_DocEnv、Cv_Article、Cv_Tables也是复杂节点,对应定义到DocRoot的子节点,依次类推定义一个完整的Schema。
(2)按照步骤(1)中得到Schema定义一系列的数据结构(步骤S32),参看图1中的“XML内存树结构”。
在面向对象的C++语言中,对于Schema中的每一个节点定义一个数据结构,对于所有的属性都定义到相应数据结构中的成员变量。利用设计模式中的Composite模式,对于Schema中的中间节点都应该从CompositeObject类派生,对于Schema中的叶子节点都应该从CompositeLeafObject派生。
示意代码如下:
Figure GSB00000601310600041
Figure GSB00000601310600051
(3)将需要兼容的文件转换成步骤(2)中的数据结构,形成树型数据结构(步骤S33),具体方法如下:
1)如果要兼容Office文件,则需要利用微软提供的API函数把Office文档中的各个部分转换生成步骤(2)中的各个数据结构。同时都需要挂接到各自所属的父节点之下,形成一棵XML内存树。参看图1中“Office文档”到“FantArt XML文件”的步骤。
2)如果要兼容早期版本的历史文件,由于格式很可能跟现在版本的数据结构相差甚大。所以应该先把这种历史文件按照自己的数据格式直接输出一个XML文件,然后通过DOM和XSLT技术把这个XML文件转换成符合步骤(1)中要求的标准XML文件,最后再通过步骤(2)中各个数据结构的Parser(解析器)解析代码,生成对应的XML内存树。参看图1中“老飞腾文档”到“XML文件”再到“FantArt XML文件”的步骤。
3)如果是要实现低版本程序兼容高版本程序制作的文件,因为高版本的程序存储的兼容格式已经是基于标准XML扩展的XML文件,这时就可以直接Load该XML文件,然后通过步骤(2)中各个数据结构的Parser(解析器)解析代码,生成对应的XML内存树,在这个过程中可能会丢失一些扩展的属性,但是已经能够完成低版本程序兼容高版本程序制作的文件的要求。参看图1中“兼容格式文档”到“FantArt XML文件”的步骤。
(4)将步骤(3)中生成的XML内存树导入到当前程序中,从而实现文件的兼容并能够展现给客户(步骤S34),参看图1中“XML内存树结构”到“FantArt对象”步骤。具体方法如下:
1)这个模块会复杂一些,需要从总体上把握整个文档结构,把文档分解为几个大的部分,比如排版软件——飞腾创意中:DocRoot代表整个文档结构,可以分解为DocEnv(文档参数)部分、Articles(文章、内容)部分、Tables(表格)部分等等。
2)针对文档的每个部分构建一个导入引擎——ImportEngine,一方面需要导入对应节点的属性(即实现其Import()函数),另一方面还需要完成其子节点的导入(即实现其ImportChildren()函数),如果子节点是简单就直接导入;如果是复杂节点,就需要调用该子节点的导入引擎。
示意代码如下:
Figure GSB00000601310600061
3)从根节点DocRoot开始调用DocRoot的导入引擎——DocRootImportEngine的Import()函数,该函数中首先完成该节点的属性导入,然后调用ImportChildren(),实现导入引擎的递归调用。
4)各个节点的Import()函数,主要是完成程序中与该节点对应的对象的创建及其属性的设置,同时需要设置好新创建的对象与其父对象的关联关系。比如:排版软件——飞腾创意中:DocRoot的导入函数首先会创建一个文档,然后设置该文档的相关属性。然后就是依次调用DocEnv、Articles、Tables等等的导入引擎的Import()函数从而实现整个文档数据的导入。
(5)另外,在实现低版本程序兼容高版本程序制作的文件的过程中需要完成高版本程序另存为“兼容格式文档”的功能,其实就是把当前文档导出生成一个标准XML文件,参看图1中“FantArt对象”到“XML内存树结构”步骤。其实就是第(4)点中的各个部分另外需要实现一个跟导入引擎功能相反的导出引擎——ExportEngine。其内部实现的机理完全类似。所不同的是:导入引擎是完成XML内存树结构到文档对象的转换,而导出引擎刚好相反是完成文档对象到XML内存树结构的转换。然后这个XML内存树输出相应的XML文件。参看图1中“XML内存树”到“兼容格式文档”步骤。
示意代码如下:
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。

Claims (6)

1.一种利用XML内存树实现多种文件兼容的方法,包括如下步骤:
(1)针对当前程序中所有需要保存的数据内容定义一个完整Schema,首先需要分析当前程序中所有需要存储到文档中的数据,按照程序中数据的层次结构定义具有相同层次结构的Schema,以DocRoot节点作为文档的根节点,对于程序中复杂的数据定义为Schema中的一个节点,对于程序中简单的数据定义为Schema中的节点的属性,另外还需要结合数据的语义来最终确定程序中的数据是作为Schema中的节点还是属性;
(2)按照步骤(1)中得到Schema定义一系列的数据结构,即对于Schema中的每一个节点定义一个数据结构,对于所有的属性都定义为相应数据结构中的成员变量;
(3)将需要兼容的文件转换成步骤(2)中的数据结构,形成一个树型数据结构即XML内存树结构;
(4)将步骤(3)中生成的XML内存树结构导入到当前程序中,从而实现文件的兼容。
2.如权利要求1所述的一种利用XML内存树实现多种文件兼容的方法,其特征是:步骤(3)中,如果要兼容Office文件,则利用微软提供的API函数把Office文档中的各个部分转换生成步骤(2)中的各个数据结构,同时将各个对象挂接到各自所属的父节点之下,形成一棵XML内存树结构。
3.如权利要求1所述的一种利用XML内存树实现多种文件兼容的方法,其特征是:步骤(3)中,如果要兼容早期版本的历史文件,则先把这种历史文件按照自己的数据格式直接输出一个XML文件,然后通过DOM和XSLT技术把这个XML文件转换成符合步骤(1)中要求的标准XML文件,最后再通过步骤(2)中各个数据结构的解析器解析代码,生成对应的XML内存树结构。
4.如权利要求1所述的一种利用XML内存树实现多种文件兼容的方法,其特征是:步骤(3)中,如果要实现低版本程序兼容高版本程序制作的XML文件,则直接读入该XML文件,然后通过步骤(2)中各个数据结构的解析器解析代码,生成对应的XML内存树结构。
5.如权利要求1、2、3或4所述的一种利用XML内存树实现多种文件兼容的方法,其特征是:步骤(4)中,将XML内存树结构导入到当前程序中的方法包括以下步骤:
首先,针对文件的每个部分构建一个导入引擎ImportEngine,所述的导入引擎ImportEngine一方面要导入对应节点的属性,另一方面还要完成其子节点的导入,如果子节点是简单节点就直接导入,如果是复杂节点,就需要调用该子节点的导入引擎;
然后,从根节点DocRoot开始调用DocRoot的导入引擎DocRootImportEngine的Import()函数,该函数中首先完成该节点的属性导入,然后调用ImportChildren(),实现导入引擎的递归调用;
最后,各个节点的Import()函数,主要是完成程序中与该节点对应的对象的创建及其属性的设置,同时需要设置好新创建的对象与其父对象的关联关系,然后就是调用ImportChindren()函数从而实现整个文档数据的导入。
6.如权利要求5所述的一种利用XML内存树实现多种文件兼容的方法,其特征是:在实现低版本程序兼容高版本程序制作的文件的过程中,在进行步骤(2)之前先将高版本程序中的当前文件导出生成一个标准XML文件。
CN200710177203.8A 2007-11-12 2007-11-12 一种利用xml内存树实现多种文件兼容的方法 Expired - Fee Related CN101436185B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200710177203.8A CN101436185B (zh) 2007-11-12 2007-11-12 一种利用xml内存树实现多种文件兼容的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200710177203.8A CN101436185B (zh) 2007-11-12 2007-11-12 一种利用xml内存树实现多种文件兼容的方法

Publications (2)

Publication Number Publication Date
CN101436185A CN101436185A (zh) 2009-05-20
CN101436185B true CN101436185B (zh) 2012-02-01

Family

ID=40710626

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200710177203.8A Expired - Fee Related CN101436185B (zh) 2007-11-12 2007-11-12 一种利用xml内存树实现多种文件兼容的方法

Country Status (1)

Country Link
CN (1) CN101436185B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2481191A (en) 2010-02-25 2011-12-21 Sita Information Networking Computing Ireland Ltd Graphical development tool for software application development
US9324043B2 (en) 2010-12-21 2016-04-26 Sita N.V. Reservation system and method
CN102855244B (zh) * 2011-06-28 2015-02-25 北大方正集团有限公司 文档目录处理方法和装置
WO2013017179A1 (en) 2011-08-03 2013-02-07 Sita Information Networking Computing Usa, Inc Item handling and tracking system and method therefor
CN102289835A (zh) * 2011-08-30 2011-12-21 北京瑞信在线系统技术有限公司 微动画效果查看方法及装置
CN102982010B (zh) * 2011-09-02 2016-06-22 北大方正集团有限公司 提取文档结构的方法和装置
CN102982028A (zh) * 2011-09-02 2013-03-20 北大方正集团有限公司 用于提取文档结构的方法和装置
CN103136184B (zh) * 2011-12-05 2016-01-13 北大方正集团有限公司 一种自动排版的方法及其装置
GB2499288A (en) 2012-02-09 2013-08-14 Sita Inf Networking Computing Usa Inc Path determination
US9087204B2 (en) 2012-04-10 2015-07-21 Sita Information Networking Computing Ireland Limited Airport security check system and method therefor
CN104063386B (zh) * 2013-03-20 2018-10-09 北大方正集团有限公司 一种内容对象复用的方法和装置
US10320908B2 (en) 2013-03-25 2019-06-11 Sita Information Networking Computing Ireland Limited In-flight computing device for aircraft cabin crew
GB2515142B (en) 2013-06-14 2020-12-16 Sita Information Networking Computing Ireland Ltd Portable user control system and method therefor
GB2523441A (en) 2014-02-19 2015-08-26 Sita Information Networking Computing Ireland Ltd Reservation system and method therefor
US10001546B2 (en) 2014-12-02 2018-06-19 Sita Information Networking Computing Uk Limited Apparatus for monitoring aircraft position
CN106649428A (zh) * 2016-08-09 2017-05-10 广州视睿电子科技有限公司 存储文件的解析方法和装置
CN107861725B (zh) * 2017-11-22 2020-12-22 北京酷我科技有限公司 一种iOS数据反向自动解析策略
CN113505269B (zh) * 2021-07-02 2024-03-29 卡斯柯信号(成都)有限公司 基于xml的二进制文件检测方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611843B1 (en) * 2000-10-26 2003-08-26 Docent, Inc. Specification of sub-elements and attributes in an XML sub-tree and method for extracting data values therefrom
CN101067814A (zh) * 2007-05-10 2007-11-07 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN100545835C (zh) * 2003-05-01 2009-09-30 甲骨文国际公司 在xml文档和关系数据之间的映射中保留层次信息

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611843B1 (en) * 2000-10-26 2003-08-26 Docent, Inc. Specification of sub-elements and attributes in an XML sub-tree and method for extracting data values therefrom
CN100545835C (zh) * 2003-05-01 2009-09-30 甲骨文国际公司 在xml文档和关系数据之间的映射中保留层次信息
CN101067814A (zh) * 2007-05-10 2007-11-07 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法

Also Published As

Publication number Publication date
CN101436185A (zh) 2009-05-20

Similar Documents

Publication Publication Date Title
CN101436185B (zh) 一种利用xml内存树实现多种文件兼容的方法
CN104410667B (zh) 一种xml报文到json报文的转换方法及系统
CN102279847B (zh) 软件系统国际化方法和装置
CN100489862C (zh) 标记性语言文档的解析方法、解析模块和用户终端
CN102819426B (zh) 一种AUTOSAR模型同步到Simulink模型的方法
CN104035754A (zh) 一种基于xml的自定义代码生成方法及生成器
CN106713357A (zh) 一种通用的网络协议解析方法
CN102693310A (zh) 一种基于关系数据库的资源描述框架查询方法和系统
CN102184266A (zh) 一种页面与数据分离的动态wap网站自动生成方法
CN101382893B (zh) 一种基于Web服务的构件在线组装方法
CN101901234A (zh) 将xml数据转换为资源描述框架数据的方法和系统
CN101944023B (zh) Unix服务器软件通用命令行接口实现方法
CN102982010A (zh) 提取文档结构的方法和装置
CN101295311A (zh) 一种大规模发布订阅系统的语义匹配算法
CN106649769B (zh) 一种基于语义的xbrl数据到owl数据的转换方法
CN101609399A (zh) 基于建模的智能化网站开发系统及方法
CN103019874A (zh) 基于数据同步实现异常处理的方法及装置
CN102222004A (zh) 交换机专用语言转换为c语言的方法
CN109445771A (zh) 一种cs架构下网络层模块代码自动生成工具及方法
CN105468793A (zh) 一种仿真模型数据的自动化管理方法
CN109116828A (zh) 一种控制器中模型代码配置方法和装置
CN115202663A (zh) 一种数据处理方法、装置和存储介质
CN102023859A (zh) 面向数字化研制环境的可靠性维修性保障性软件集成方法
CN102073662A (zh) 一种解析和创建xml数据的方法及系统
CN105912723A (zh) 一种自定义字段的存储方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220615

Address after: 3007, Hengqin international financial center building, No. 58, Huajin street, Hengqin new area, Zhuhai, Guangdong 519031

Patentee after: New founder holdings development Co.,Ltd.

Patentee after: BEIJING FOUNDER ELECTRONICS Co.,Ltd.

Address before: 100871, fangzheng building, 298 Fu Cheng Road, Beijing, Haidian District

Patentee before: PEKING UNIVERSITY FOUNDER GROUP Co.,Ltd.

Patentee before: BEIJING FOUNDER ELECTRONICS Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120201