CN101739462B - 可扩展标记语言编码方法、解码方法和客户端 - Google Patents
可扩展标记语言编码方法、解码方法和客户端 Download PDFInfo
- Publication number
- CN101739462B CN101739462B CN2009102659794A CN200910265979A CN101739462B CN 101739462 B CN101739462 B CN 101739462B CN 2009102659794 A CN2009102659794 A CN 2009102659794A CN 200910265979 A CN200910265979 A CN 200910265979A CN 101739462 B CN101739462 B CN 101739462B
- Authority
- CN
- China
- Prior art keywords
- data structure
- xml
- node
- binary tree
- client
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供一种可扩展标记语言编码方法、解码方法和客户端,所述编码方法包括以下步骤:客户端获取待编码数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;所述客户端根据所述XML元素,生成XML文本。本发明能够有效提高XML编码和解码的效率。
Description
技术领域
本发明涉及XML(Extensible Markup Language,可扩展标记语言)编解码技术领域,尤其涉及一种可扩展标记语言编码方法编码方法、解码方法和客户端。
背景技术
XML是由World Wide Web Consortium(W3C)XML工作组定义的,是一套定义语义标记的规则,这些标记将文本分成许多部件并对这些部件加以标识。XML提供一种描述结构化数据的方法,用于定义数据本身的结构和数据类型,与主要用于控制数据显示和外观的HTML(Hyper Text MarkupLanguage,超文本置标语言)标记不同。
XML的若干优越性如下:
(1)XML格式是基于文本的,更容易读、更便于存储,有时也更便于调试。
(2)XML文本可使用已为HTML建立的很多基础结构,包括HTTP协议和某些浏览器,HTTP允许穿过防火墙传输XML。
(3)XML分析已有完善的定义,且已广泛应用,使得在各种环境中从XML文本检索信息成为可能。
(4)当使用架构时,应用程序可依赖XML分析器进行某些结构验证以及数据类型检查。
(5)XML建立在Unicode(统一码)基础上,使得创建国际化文本更容易。
鉴于XML的诸多优点,很多应用程序都采用XML作为数据表示方式。
应用程序采用XML作为数据表示方式时,在发送XML文本前,需要对数据结构进行编码生成XML文本,在接收到XML文本后,需要对XML文本进行解码,对数据结构进行赋值。
现有技术中的XML编码方法是:为应用程序的每个XML模式编写对应的XML编码函数,根据该XML编码函数对XML模式对应的数据结构进行编码。相应的XML解码方法是:为每个XML模式编写对应的XML赋值函数,根据该XML赋值函数对XML模式对应的数据结构进行赋值。上述编解码方法非常笨重,尤其是在XML模式非常多的情况下,函数代码量将会很大,影响编码和解码的效率。
发明内容
有鉴于此,本发明提供一种可扩展标记语言编码方法编码方法、解码方法和客户端,能够有效提高XML编码和解码的效率。
为解决上述问题,本发明提供一种XML编码方法,包括以下步骤:
客户端获取待编码数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;
所述客户端根据所述XML元素,生成XML文本。
所述客户端获取待编码数据结构对应的二叉树,之前还包括:
所述客户端根据与所述数据结构对应的XML模式构建所述二叉树。
所述数据结构成员的相关信息中包括所述数据结构成员的偏移量;
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素,具体包括:
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的偏移量,获取与所述当前遍历到的节点对应的数据结构成员的存储地址;
所述客户端根据与所述当前遍历到的节点对应的数据结构成员的存储地址,获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素。
所述客户端采用先序遍历的方法遍历所述二叉树。
本发明还提供一种XML解码方法,包括以下步骤:
客户端获取待解码XML文本的数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
所述客户端扫描所述XML文本,从所述二叉树中获取与当前扫描到的XML元素对应的节点;
所述客户端根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
所述客户端获取待解码XML文本的数据结构对应的二叉树,之前还包括:
所述客户端根据与所述数据结构对应的XML模式构建所述二叉树。
所述客户端根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员,具体包括:
所述客户端获取与当前扫描到的XML元素对应的节点中存储的数据结构成员的偏移量;
所述客户端根据所述偏移量,获取与当前扫描到的XML元素对应的节点对应的数据结构成员的存储地址;
所述客户端根据所述存储地址,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
本发明还提供一种客户端,包括:
获取模块,用于获取待编码数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
遍历模块,用于遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;
生成模块,用于根据所述XML元素,生成XML文本。
所述客户端还包括:
构建模块,用于根据与所述数据结构对应的XML模式构建所述二叉树。
本发明还提供一种客户端,包括:
获取模块,用于获取待解码XML文本的数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
扫描模块,用于扫描所述XML文本,从所述二叉树中获取与当前扫描到的XML元素对应的节点;
赋值模块,用于根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
所述客户端还包括:
构建模块,用于根据与所述数据结构对应的XML模式构建所述二叉树。
本发明具有以下有益效果:
根据XML模式构建二叉树,所述二叉树的节点与根据所述XML模式定义的数据结构中的数据结构成员一一对应,节点中存储有与所述节点对应的数据结构成员的相关信息,可以通过遍历所述二叉树对所述数据结构进行XML编码,无需为每个XML模式编写编码函数;另外,还可以通过定位扫描到的XML文本中的XML元素在二叉树中对应的节点,完成待解码XML文本的数据结构的赋值,无需为每个XML模式编写赋值函数,从而有效提高了XML编解码效率。
附图说明
图1为本发明实施例的XML编码方法的一流程示意图;
图2为本发明实施例的二叉树的一结构示意图;
图3为本发明实施例的二叉树遍历方法的流程示意图;
图4为本发明实施例的XML解码方法的一流程示意图;
图5为本发明实施例的XML解码方法的另一流程示意图;
图6为本发明实施例的客户端的一结构示意图;
图7为本发明实施例的客户端的另一结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
如图1所示为本发明实施例的XML编码方法的一流程示意图,所述XML编码方法包括以下步骤:
步骤101,客户端根据待编码数据结构对应的XML模式构建二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
所述客户端为一客户端软件,安装于一客户端设备上,所述客户端设备可以为计算机、手机或PDA(Personal Digital Assistant,个人数字助理)等电子设备。
所述XML模式用于描述XML文本的结构,可以为XML Schema或者DTD(Document Type Definition,文本类型定义),下面为XML模式的一具体示例:
<xs:complexType name=″student″>
<xs:sequence>
<xs:element name=″name″type=″xs:string″/>
<xs:element name=″class″type=″xs:string″/>
<xs:element name=″score″type=″xs:decimal″/>
<xs:element name=″address″type=″xs:string″/>
</xs:sequence>
<xs:attribute name=″id″type=″xs:string″use=″required″/>
</xs:complexType>
所述待编码数据结构是根据预设XML模式定义得到的,举例来说,根据上述的XML模式,定义的数据结构如下:
Typedef struct
{
char*id;
char*name;
char*class;
char*address;
int score;
}T_Student;
对于数据结构的定义需要遵循以下规则:通常为XML模式中复杂类型(complexType)的元素(如上述″student″)定义一数据结构,其中,该元素的子节点(如上述″name″、″class″、″score″等)和属性均称为该数据结构的数据结构成员。
如图2所示为本发明实施例的二叉树的一结构示意图,所述二叉树的节点中存储有与所述节点对应的数据结构成员的相关信息,所述数据结构成员的相关信息包括:节点名称、数据类型、该数据结构成员相对于当前数据结构的偏移量(以下简称数据结构成员的偏移量)、当前数据结构大小(数据类型为列表时)、可选标志量对应的偏移量、对列表类型进行计数的数据结构成员的偏移量以及枚举类型内容等。
另外,在所述数据结构成员具有属性时,本发明实施例中将数据结构成员的属性,以链表的形式存储于二叉树的节点所在的位置上,如图2中所示,第二层孩子节点具有属性,虚线部分表示链表。
本发明实施例中,二叉树的存储方式通过数组实现,二叉树中的节点之间的关系通过数组的下标来记录。
步骤102,所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;
步骤103,所述客户端根据所述XML元素生成XML文本。
所述客户端生成所述XML文本后,可以根据需要将所述XML文本发送给数据接收方客户端。
上述实施例中,可以在每一次对数据结构进行编码之前,均构建所述数据结构对应的二叉树,当然,也可以仅在第一次对所述数据结构进行编码时,构建所述数据结构对应的二叉树,并存储所述二叉树,在下一次对所述数据结构进行编码时,直接利用存储的二叉树进行XML编码即可。
上述实施例中,所述步骤102中是根据所述数据结构成员的偏移量对所述数据结构进行编码的,所述步骤102具体包括:
步骤一,所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的偏移量,获取与所述当前遍历到的节点对应的数据结构成员的存储地址;
步骤二,所述客户端根据与所述当前遍历到的节点对应的数据结构成员的存储地址,获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素。
所述数据结构成员的偏移量可以通过offset函数计算得到:
#define offset(type,member)(size t)(&((type*)0)->member);
其中,member是指数据结构成员。由于ANSI C标准中允许任何值为0的常量被强制转换成任何一种类型的NULL(空)指针,因此((type*)0)的结果就是一个类型为type*的NULL指针。如果利用这个NULL指针来访问type的成员是非法的,但是&(((type*)0)->member)并非想访问type的内容,而仅仅是计算当结构体实例(当前数据结构)的首地址为((type*)0)时member(数据结构成员)的地址,而这个地址的值就是该数据结构成员的偏移量。
如果XML模式比较复杂,其定义的数据结构也会相对复杂,此时计算数据结构成员的绝对偏移量(即每一个节点相对于根节点的偏移量)并不是很方便,因此,可以计算数据结构成员的相对偏移量(即每个节点相对于其父节点的偏移量)。数据结构成员的偏移量的计算公式如下:
数据结构成员的偏移量=父节点的偏移量+相对父节点的偏移量;
若该数据结构成员为列表类型,则
数据结构体成员的偏移量+=列表类型计数值*列表成员大小;
数据结构成员的地址=当前数据结构的首地址+数据结构成员的偏移量。
本发明实施例中采用对二叉树进行先序遍历的方法实现XML编码,所谓先序遍历是指先遍历根节点,再遍历根节点的左子树,最后遍历根节点的右子树。如图3所示为本发明实施例的二叉树遍历方法的流程示意图,所述遍历方法包括以下步骤:
步骤301,将二叉树的根节点做为当前节点;
步骤302,判断栈(Stack)是否为空或当前节点是否为空,如果否,执行步骤303,否则结束编码;栈为空即表示完成了该二叉树的先序遍历。
步骤303,判断当前节点是否为空,如果不为空则执行步骤304,如果为空则执行步骤312;
步骤304,判断当前节点的类型是否为可选类型,如果是则执行步骤305,否则执行步骤307;二叉树节点类型包括基本类型和扩展类型,其中基本类型包括:SCHEMA_INT(整数类型)、SCHEMA_STRING(字符串类型)、SCHEMA_BOOL(布尔类型)、SCHEMA_ENUM(枚举类型)和SCHEMA_DATE(时间类型);扩展类型包括:SCHEMA_LIST(列表类型)、SCHEMA_OPTION(可选类型);
步骤305,根据当前节点中存储的当前节点的可选标志的偏移量,从数据结构中获取当前节点的可选标志的值,并根据当前节点的可选标志的值,判断当前节点的可选标识是否有效,如果是则执行步骤307,否则执行步骤306;
步骤306,将当前节点的兄弟节点作为新的当前节点,并返回步骤302;
步骤307,构造开始元素标签并写入buffer(缓存,用于存储XML文本),另外,若当前节点存在属性,则按照“属性名称=属性值”的格式将属性写入buffer,且相邻两个属性用空格隔开;开始元素标签是XML文本中XML元素开始的标识。
步骤308,判断当前节点的类型是否为基本类型,如果是则执行步骤309,否则执行步骤310;
步骤309,根据当前节点对应的数据结构成员的相关信息,从数据结构中获取当前节点对应的数据结构成员的值并写入buffer;
步骤310,将当前节点插入栈中;
步骤311,将当前节点的子节点作为新的当前节点,并返回步骤302;
步骤312,栈顶元素出栈,构造所述栈顶元素的结束标签并写入buffer;
步骤313,判断所述栈顶元素的类型是否为列表类型,如果是则执行步骤314,否则执行步骤315;
步骤314,记录所述栈顶元素的计数,并判断所述栈顶元素的计数是否小于列表大小,如果是,执行步骤315,否则执行步骤316;
步骤315,将该栈顶元素记录为当前节点;
步骤316,将栈顶元素兄弟节点做为新的当前节点,并返回步骤302。
通过上述实施例提供的XML编码方法,根据XML模式构建二叉树,所述二叉树的节点与根据所述XML模式定义的数据结构中的数据结构成员一一对应,节点中存储与所述节点对应的数据结构成员的相关信息,可以通过遍历所述二叉树对所述数据结构进行XML编码,无需为每个XML模式编写编码函数,从而有效提高了XML编码效率。
客户端在需要发送数据时,通过上述实施例中描述的XML编码方法对数据结构执行编码,生成XML文本,并将生成的XML文本发送给数据接收方客户端。数据接收方客户端在接收到XML文本后,需要对XML文本进行解码,完成对数据结构的赋值,以将数据显示给用户,下面将详细描述本发明实施例的XML解码方法。
如图4所示为本发明实施例的XML解码方法的一流程示意图,所述XML解码方法包括以下步骤:
步骤401,客户端获取待解码XML文本的数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
步骤402,所述客户端扫描所述XML文本,从所述XML文本中依次读取XML元素,并从所述二叉树中获取与当前扫描到的XML元素对应的节点;
所述客户端扫描所述XML文本,是指所述客户端从头到尾依次读取所述XML文本中的内容。
步骤403,所述客户端根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
上述实施例中,可以在每一次对XML文本进行解码之前,均构建所述XML文本的数据结构对应的二叉树,当然,也可以仅在第一次对XML文本进行编解码时,构建所述数据结构对应的二叉树,并存储所述二叉树,在下一次对相同数据结构的XML文本进行解码时,直接利用存储的二叉树进行解码即可。
所述步骤402中是根据当前遍历到的节点中存储的与当前遍历到的节点对应的数据结构成员的偏移量,对与当前遍历到的节点对应的数据结构成员进行赋值的。此时,所述步骤402可以具体包括:
步骤一,所述客户端获取与当前扫描到的XML元素对应的节点中存储的数据结构成员的偏移量;
步骤二,所述客户端根据所述偏移量,获取与当前扫描到的XML元素对应的节点对应的数据结构成员的存储地址;
步骤三,所述客户端根据所述存储地址,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
在上述描述的XML解码过程中可知,扫描到某个XML元素时,需要从所述二叉树中获取与当前扫描到的XML元素对应的节点,然后才能完成对当前扫描到的XML元素对应的数据结构成员的赋值。因此,需要在XML文本扫描过程中,记录所述二叉树中上次处理的节点的位置,然后将扫描到的XML元素的名称依次与下列节点进行比较:
1)上次处理的节点的所有子节点;
2)上次处理的节点的兄弟节点;
3)上次处理的节点的父节点的所有兄弟节点;如果没有,再查找上一层父节点,直到根节点。
每个XML元素的属性均是以链表的结构进行存储,所以对于某个XML元素的属性的查找只需依次遍历链表即可。
下面以采用SAX(Simple API for XML)解码方法为例,对本发明实施例的XML解码方法进行说明。
SAX提供了一个用来解码XML文本的基于事件的框架。SAX解码器解码XML文本时,可以触发一系列的事件,当发现给定的XML文本标签时,可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定遇到相应的标签如何处理,特别是当开发人员只需要处理XML文本中所包含的部分数据时。
如图5所示为本发明实施例的XML解码方法的另一流程示意图,所述XML解码方法包括以下步骤:
步骤501,根据待解码XM1文本对应的XML模式定义数据结构;
步骤502,根据所述XML模式构建二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
步骤503,扫描所述XML文本,判断XML文本是否扫描结束,如果是,则结束解码过程,否则,执行步骤504;
该步骤中,启动SAX解码器,向SAX解码器中注册用户数据(二叉树、数据结构的地址等),SAX解码器在每个事件被触发时,会将该用户数据作为参数返回。
步骤504,判断当前扫描到的内容的类型,如果当前扫描到的内容的类型为开始元素标签,则执行步骤505,如果当前扫描到的内容的类型为文本元素标签,则执行步骤,如果当前扫描到的内容的类型结束元素标签,则执行步骤;
步骤505,根据当前XML元素的名称和上次处理节点的位置,定位与当前XML元素对应的节点。
步骤506,根据所述当前XML元素对应的节点的类型,对所述节点对应的数据结构成员进行赋值;
具体的,若该节点为可选类型,则置所述节点的可选标志位有效,并根据该节点存储的与所述节点对应的数据结构成员的偏移量,对与所述节点对应的数据结构成员进行赋值;若所述当前XML元素带有属性,则遍历所述当前XML元素对应的链表获取其属性,由于属性都依附于当前XML元素,所以属性对应的偏移量是当前XML元素的偏移量加上属性的相对偏移量,得到属性的偏移量,从而完成对属性的赋值;
步骤507,表示当前XML元素为上次处理节点的值,由于在扫描过程中记录了该位置,可根据记录的位置直接在二叉树中找到该节点,计算该节点的父节点偏移量,对该节点对应的数据结构成员进行赋值;
步骤508,表示当前XML元素对应上次处理节点,可根据记录的位置直接在二叉树中找到该节点,若该节点为列表类型,则需要对该节点对应的数据结构成员进行计数操作。
XML文本扫描结束后,即完成了由XML文本到数据结构的解码过程。
在上述XML解码过程中,对各种不同的二叉树节点类型的处理方式如下:
节点为基本类型时:
SCHEMA_INT:若节点为整数类型,将扫描到的值转化为int,根据偏移量进行赋值;
SCHEMA_STRING:若节点为字符串类型,将扫描到的值直接进行拷贝;
SCHEMA_BOOL:若节点为布尔类型,通过将扫描到的值与“true”和
“false”进行比较,对该节点对应的数据结构成员进行赋值;
SCHEMA_ENUM:若节点为枚举类型,则需要存储每一个枚举值,之后将扫描到的值与各个枚举值进行一一比较,即可对枚举类型赋值;
SCHEMA_DATE:若节点为时间类型,则将扫描到的值通过固定的时间类型格式进行解码,从而完成时间日期类型节点的赋值;
节点为扩展类型时:
SCHEMA_LIST:若节点属于某种基本类型的同时又是一个列表,则需要对扫描到的值进行计数,此时要存储该节点对应的计数成员的偏移量,以便对计数进行累加;
SCHEMA_OPTION:若节点属于某种基本类型的同时又是一个可选类型,当扫描到该节点时,某个用户数据置为有效。
以上只是几种常见的节点类型,当然,也可以在此基础上扩展出其他的类型,在此不再一一描述。
通过上述实施例提供的XML解码方法,根据XML模式构建二叉树,所述二叉树的节点与根据所述XML模式定义的数据结构中的数据结构成员一一对应,节点中存储与所述节点对应的数据结构成员的相关信息,可以通过定位扫描到的XML文本中的XML元素在二叉树中对应的节点,完成数据结构的赋值,无需为每个XML模式编写赋值函数,从而有效提高了XML编解码效率。
相应于上述XML编码方法,本发明实施例还提供一种客户端,如图6所示,所述客户端包括:
创建模块601,用于根据待编码数据结构对应的XML模式构建二叉树;,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;所述数据结构成员的相关信息包括:节点名称、数据类型、该数据结构成员的偏移量、当前数据结构大小(数据类型为列表时)、可选标志量对应的偏移量、对列表类型进行计数的数据结构成员的偏移量以及枚举类型内容等。另外,在所述数据结构成员具有属性时,本发明实施例中将数据结构成员的属性,以链表的形式存储于二叉树的节点所在的位置上。
获取模块602,用于获取待编码数据结构对应的二叉树;
遍历模块603,用于遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;所述遍历模块602采用先序遍历的方法遍历所述二叉树。
生成模块604,用于根据所述XML元素,生成XML文本。
所述客户端生成所述XML文本后,可以根据需要将所述XML文本发送给数据接收方客户端。
上述实施例中,可以在每一次对数据结构进行编码之前,均构建所述数据结构对应的二叉树,当然,也可以仅在第一次对所述数据结构进行编码时,构建所述数据结构对应的二叉树,并存储所述二叉树,在下一次对所述数据结构进行编码时,直接利用存储的二叉树进行XML编码即可。
通过上述实施例提供的客户端,根据XML模式构建二叉树,所述二叉树的节点与根据所述XML模式定义的数据结构中的数据结构成员一一对应,节点中存储与所述节点对应的数据结构成员的相关信息,可以通过遍历所述二叉树对所述数据结构进行XML编码,无需为每个XML模式编写编码函数,从而有效提高了XML编码效率。
相应于上述XML解码方法,本发明实施例还提供一种客户端,如图7所示,所述客户端包括:
构建模块701,用于根据与待解码XM1文本的数据结构对应的XML模式构建二叉树;,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
获取模块702,用于获取待解码XML文本的数据结构对应的二叉树
扫描模块703,用于扫描所述XML文本,从所述二叉树中获取与当前扫描到的XML元素对应的节点;
赋值模块704,用于根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
上述实施例中,可以在每一次对XML文本进行解码之前,均构建所述XML文本的数据结构对应的二叉树,当然,也可以仅在第一次对XML文本进行编解码时,构建所述数据结构对应的二叉树,并存储所述二叉树,在下一次对相同数据结构的XML文本进行解码时,直接利用存储的二叉树进行解码即可。
通过上述实施例提供的客户端,根据XML模式构建二叉树,所述二叉树的节点与根据所述XML模式定义的数据结构中的数据结构成员一一对应,节点中存储与所述节点对应的数据结构成员的相关信息,可以通过定位扫描到的XML文本中的XML元素在二叉树中对应的节点,完成待解码XML文本的数据结构的赋值,无需为每个XML模式编写赋值函数,从而有效提高了XML解码效率。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种XML文本的生成方法,其特征在于,包括以下步骤:
客户端获取待编码数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;
所述客户端根据所述XML元素,生成XML文本。
2.根据权利要求1所述的XML文本的生成方法,其特征在于,所述客户端获取待编码数据结构对应的二叉树,之前还包括:
所述客户端根据与所述数据结构对应的XML模式构建所述二叉树。
3.根据权利要求1或2所述的XML文本的生成方法,其特征在于,所述数据结构成员的相关信息中包括所述数据结构成员的偏移量;
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素,具体包括:
所述客户端遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的偏移量,获取与所述当前遍历到的节点对应的数据结构成员的存储地址;
所述客户端根据与所述当前遍历到的节点对应的数据结构成员的存储地址,获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素。
4.根据权利要求1所述的XML文本的生成方法,其特征在于,所述客户端采用先序遍历的方法遍历所述二叉树。
5.一种XML文本的处理方法,其特征在于,包括以下步骤:
客户端获取待解码XML文本的数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
所述客户端扫描所述XML文本,从所述二叉树中获取与当前扫描到的XML元素对应的节点;
所述客户端根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
6.根据权利要求5所述的XML文本的处理方法,其特征在于,所述客户端获取待解码XML文本的数据结构对应的二叉树,之前还包括:
所述客户端根据与所述数据结构对应的XML模式构建所述二叉树。
7.根据权利要求5或6所述的XML文本的处理方法,其特征在于,所述客户端根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员,具体包括:
所述客户端获取与当前扫描到的XML元素对应的节点中存储的数据结构成员的偏移量;
所述客户端根据所述偏移量,获取与当前扫描到的XML元素对应的节点对应的数据结构成员的存储地址;
所述客户端根据所述存储地址,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
8.一种客户端,其特征在于,包括:
获取模块,用于获取待编码数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
遍历模块,用于遍历所述二叉树,根据当前遍历到的节点存储的数据结构成员的相关信息,从所述数据结构中获取与所述当前遍历到的节点对应的数据结构成员的值作为XML元素;
生成模块,用于根据所述XML元素,生成XML文本。
9.根据权利要求8所述的客户端,其特征在于,还包括:
构建模块,用于根据与所述数据结构对应的XML模式构建所述二叉树。
10.一种客户端,其特征在于,包括:
获取模块,用于获取待解码XML文本的数据结构对应的二叉树,所述二叉树的节点与所述数据结构中的数据结构成员一一对应,所述节点中存储有与所述节点对应的数据结构成员的相关信息;
扫描模块,用于扫描所述XML文本,从所述二叉树中获取与当前扫描到的XML元素对应的节点;
赋值模块,用于根据与当前扫描到的XML元素对应的节点中存储的数据结构成员的相关信息,将当前扫描到的XML元素的值赋给与当前扫描到的XML元素对应的节点对应的数据结构成员。
11.根据权利要求10所述的客户端,其特征在于,还包括:
构建模块,用于根据与所述数据结构对应的XML模式构建所述二叉树。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102659794A CN101739462B (zh) | 2009-12-31 | 2009-12-31 | 可扩展标记语言编码方法、解码方法和客户端 |
PCT/CN2010/072087 WO2010148751A1 (zh) | 2009-12-31 | 2010-04-22 | 可扩展标记语言编码方法、解码方法和客户端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102659794A CN101739462B (zh) | 2009-12-31 | 2009-12-31 | 可扩展标记语言编码方法、解码方法和客户端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101739462A CN101739462A (zh) | 2010-06-16 |
CN101739462B true CN101739462B (zh) | 2012-11-28 |
Family
ID=42462945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102659794A Expired - Fee Related CN101739462B (zh) | 2009-12-31 | 2009-12-31 | 可扩展标记语言编码方法、解码方法和客户端 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101739462B (zh) |
WO (1) | WO2010148751A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314371B (zh) * | 2011-09-07 | 2017-04-12 | 中兴通讯股份有限公司 | 基于可扩展标记语言的编码方法、解码方法及编解码装置 |
JP5334140B2 (ja) * | 2011-09-27 | 2013-11-06 | ジヤトコ株式会社 | Ft図作成支援装置及びft図作成支援プログラム |
CN102521334B (zh) * | 2011-12-07 | 2014-03-12 | 广东工业大学 | 一种基于分类特性和平衡二叉树的数据存储、查询方法 |
DE102012202315A1 (de) * | 2012-02-16 | 2013-08-22 | Robert Bosch Gmbh | Videosystem zur Darstellung von Bilddaten, Verfahren und Computerprogramm |
CN102682112B (zh) * | 2012-05-11 | 2014-11-19 | 华为技术有限公司 | 存储方法和装置 |
CN104462157B (zh) * | 2013-09-24 | 2018-03-27 | 北大方正集团有限公司 | 一种文本数据二次结构化的方法及装置 |
CN104331522B (zh) * | 2014-11-28 | 2018-03-30 | 迈普通信技术股份有限公司 | Oem信息定制方法和oem设备 |
CN106599218A (zh) * | 2016-12-16 | 2017-04-26 | 北京奇虎科技有限公司 | 一种树形结构的处理方法和装置 |
CN108153528B (zh) * | 2017-12-15 | 2020-08-14 | 东软集团股份有限公司 | 流程模型的扩展处理方法、装置、存储介质及电子设备 |
CN108829872B (zh) * | 2018-06-22 | 2021-03-09 | 武汉轻工大学 | 无损压缩文件的快速处理方法、设备、系统及存储介质 |
EP3844762A1 (en) * | 2018-08-28 | 2021-07-07 | Koninklijke Philips N.V. | Method and system for normalization of gene names in medical text |
CN109726180B (zh) * | 2018-12-03 | 2021-03-16 | 北京春鸿科技有限公司 | 在无线存储物联网设备进行文件检索和监听的方法及装置 |
CN113505269B (zh) * | 2021-07-02 | 2024-03-29 | 卡斯柯信号(成都)有限公司 | 基于xml的二进制文件检测方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1667610A (zh) * | 2005-03-24 | 2005-09-14 | 北京北方烽火科技有限公司 | 一种基于标记的xml快速解码方法 |
CN1896992A (zh) * | 2006-06-15 | 2007-01-17 | Ut斯达康通讯有限公司 | 基于应用定制解析xml文档的方法及装置 |
EP1963997A1 (en) * | 2005-12-06 | 2008-09-03 | National ICT Australia Limited | A succinct index structure for xml |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7464331B2 (en) * | 2003-08-18 | 2008-12-09 | Microsoft Corporation | System and method for validating hierarchically-organized messages |
DE102004034004A1 (de) * | 2004-07-14 | 2006-02-09 | Siemens Ag | Verfahren zum Codieren eines XML-Dokuments, sowie Verfahren zum Decodieren, Verfahren zum Codieren und Decodieren, Codiervorrichtung, Decodiervorrichtung und Vorrichtung zum Codieren und Decodieren |
US7925643B2 (en) * | 2008-06-08 | 2011-04-12 | International Business Machines Corporation | Encoding and decoding of XML document using statistical tree representing XSD defining XML document |
-
2009
- 2009-12-31 CN CN2009102659794A patent/CN101739462B/zh not_active Expired - Fee Related
-
2010
- 2010-04-22 WO PCT/CN2010/072087 patent/WO2010148751A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1667610A (zh) * | 2005-03-24 | 2005-09-14 | 北京北方烽火科技有限公司 | 一种基于标记的xml快速解码方法 |
EP1963997A1 (en) * | 2005-12-06 | 2008-09-03 | National ICT Australia Limited | A succinct index structure for xml |
CN1896992A (zh) * | 2006-06-15 | 2007-01-17 | Ut斯达康通讯有限公司 | 基于应用定制解析xml文档的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101739462A (zh) | 2010-06-16 |
WO2010148751A1 (zh) | 2010-12-29 |
WO2010148751A8 (zh) | 2011-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101739462B (zh) | 可扩展标记语言编码方法、解码方法和客户端 | |
Tidwell | XSLT: mastering XML transformations | |
CN101361063B (zh) | 支持基于规则的文档内容挖掘的系统与方法 | |
AU2006213978B2 (en) | Document processing method, recording medium, and document processing system | |
US8407326B2 (en) | Anchoring method for computing an XPath expression | |
US7086042B2 (en) | Generating and utilizing robust XPath expressions | |
US7213200B2 (en) | Selectable methods for generating robust XPath expressions | |
US20060167869A1 (en) | Multi-path simultaneous Xpath evaluation over data streams | |
US20070234199A1 (en) | Apparatus and method for compact representation of XML documents | |
US20070028163A1 (en) | Lightweight application program interface (API) for extensible markup language (XML) | |
CN106980619B (zh) | 数据查询方法及装置 | |
CN111381809B (zh) | 一种焦点页面的查找方法及装置 | |
CN109857458A (zh) | 基于ANTLR的AltaRica 3.0的扁平化的转化方法 | |
Wielemaker et al. | Why It's Nice to be Quoted: Quasiquoting for Prolog | |
CA2422490C (en) | Method and apparatus for extracting structured data from html pages | |
OMS | Oms | |
CN112650479A (zh) | 网页css结构自动生成方法及存储介质 | |
CN101446968B (zh) | 解析可扩展标记语言的方法 | |
WO2002082326A2 (en) | Extensible stylesheet designs using meta-tag information | |
Lang et al. | Package ‘xml’ | |
US20100083216A1 (en) | Dynamic Specialization of XML Parsing | |
JP2005215950A (ja) | 符号化された文書データの検索方法及びそのプログラム | |
Armstrong | Working with XML | |
Klausen | GeoXSLT: GML processing with XSLT and spatial Extensions | |
Martins et al. | Complex Data Transformations in Digital Libraries with Spatio-Temporal Information |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121128 Termination date: 20201231 |
|
CF01 | Termination of patent right due to non-payment of annual fee |