基于可变内存预申请及HASH的快速XML解析方法

阅读: 评论:0

著录项
  • CN201110324076.6
  • 20111021
  • CN103064859A
  • 20130424
  • 上海湾流仪器技术有限公司
  • 浦晶
  • G06F17/30
  • G06F17/30

  • 上海市徐汇区乐山路33号1号楼310室
  • 中国,CN,上海(31)
  • 上海智信专利代理有限公司
  • 胡美强
摘要
本发明公开了一种基于可变内存预申请及HASH的快速XML解析方法,其包括以下步骤:步骤一:读取XML文档到Xml?Content,并生成Document的Xml?Root?Node节点;步骤二:对Xml?Content进行语法分析,解析XML文档;语法分析指示解析部分的分类,进行不同分支的处理;步骤三:若分析结果为Node,则会进入迭代算法;步骤四:存放Attribute信息,进行兄弟Attribute的关系链接,并进行Node-Attribute关系的链接;步骤五:进行XML文档的任意元素节点的查询。本发明通过可变预申请内存算法提高了XML解析的速度,使得应用能通过配置Hash索引开关快速定位。
权利要求

1.一种基于可变内存预申请及HASH的快速XML解析方法,其特征 在于,该解析方法包括以下步骤:

步骤一:读取XML文档到Xml Content,并生成Document的Xml Root  Node节点;

步骤二:对Xml Content进行语法分析,解析XML文档;语法分析指 示解析部分的分类,进行不同分支的处理;

步骤三:若分析结果为Node,则会进入迭代算法,通过Xml Free Node  Linklist从预申请内存Static Node List中,取出第一个节点,存放Node信息, 并进行父子Node关系的链接;对于兄弟关系的Node的连接处理,使用链 表方式关联,若Hash索引开关开启,同时根据其Node名称为键值使用Hash 进行链接;

步骤四:若分析结果为Node下属的Attribute,则通过Xml Free Attribute  Linklist从预申请内存Static Attribute List中,取出第一个节点,存放Attribute 信息,进行兄弟Attribute的关系链接,并进行Node‑Attribute关系的链接;

步骤五:通过步骤三、步骤四的迭代算法之后,整个XML文档已映射 为Document内存树,在此基础上,可进行XML文档的任意元素节点的查 询;若Hash索引开关开启,通过Hash索引搜索;若Hash索引开关关闭, 通过Document树遍历搜索。

2.如权利要求1所述的基于可变内存预申请及HASH的快速XML解 析方法,其特征在于,所述基于可变内存预申请及HASH的快速XML解析 方法设置了Static Node List及Static Attribute List两个可变大小的预申请内 存用于存放节点信息,具备Hash索引开关,所述每个Xml Node节点由以下 元素构成:Node节点的名值信息;首尾子节点;兄弟节点;用于链接管理 的前后节点;属性链表;以及用于快速查询的Hash链表。

说明书
技术领域

本发明涉及一种解析方法,特别是涉及一种基于可变内存预申请及 HASH的快速XML解析方法。

XML(Extensible Markup Language,可扩展标记语言)是一套使用上规 则严谨但是简单的格式化描述数据语言,被广泛用来作为跨平台之间交互数 据的形式,在XML文档中,标签按约定的顺序进行嵌套组织,文档必须符 合XML的语法规范。

为此,针对XML文档的解析技术随即出现了,XML解析是将XML数 据从其序列化字符串格式转换为分层格式的过程。现有的XML解析工具, 实现了XML文档的解析存储,以及对XML文档的任意标签的读取方法。 如TinyXml,是一个使用C++语言编写的开源XML解析库,能够在Windows 或Linux中编译使用,公开了一套解析及获取XML文档信息的系统和方法。

其中,所述系统原理如下:通过解析XML文件,将文档分解成XML 的各种元素,并利用firstchild‑nextsibling tree多叉树形结构表示这些元素之 间的顺序关系以及嵌套包含关系,在内存中生成DOM模型,即文档对象模 型,然后,通过对DOM模型的访问,达到获取XML文档信息的目的。

TinyXml根据XML的各种元素主要定义了以下类:TiXmlBase:整个 TinyXML模型的公共基类;TiXmlNode:DOM树中节点元素的基类型; TiXmlDocument:对应于XML文档整体的一个对象;TiXmlDeclaration:对应 XML声明部分的对象;TiXmlComment:对应XML文档中的注释部分; TiXmlElement:对应于XML文档中的普通元素对象,普通元素可有属性,对 应于TiXmlAttribute;TiXmlText:对应于XML文档中元素中的文本信息对 象。通过以上类,便可由XML文件生成整个DOM模型。

现有的XML解析技术存在如下缺陷:在解析XML文档,生成DOM模 型的各种元素时,对于每个元素都需要对其进行动态指配内存。

该实现方法,尤其当XML文档比较大,或者利用XML文档进行的系 统间消息交换较为频繁时,由于频繁动态分配内存而导致的解析文件速度较 慢的缺陷便会暴露。

另一方面,现有的XML解析技术,在生成DOM模型树时,使用了保 存树中的每个节点保存其父节点、前后兄弟节点、首末孩子节点的指针的方 法,但是,若XML文档存在大量不同元素节点时,读取某一元素节点信息, 只能通过从头到尾遍历DOM树的方法,而不是以某种策略进行快速遍历。

本发明所要解决的技术问题是提供一种基于可变内存预申请及HASH 的快速XML解析方法,其提高了XML解析的速度;同时解决了在查询内 存树只能通过全遍历的问题,使得应用能通过Hash索引快速定位。

本发明是通过下述技术方案来解决上述技术问题的:一种基于可变内存 预申请及HASH的快速XML解析方法,其特征在于,该解析方法包括以下 步骤:

步骤一:读取XML文档到Xml Content,并生成Document的Xml Root  Node节点;

步骤二:对Xml Content进行语法分析,解析XML文档;语法分析指 示解析部分的分类,进行不同分支的处理;

步骤三:若分析结果为Node,则会进入迭代算法,通过Xml Free Node  Linklist从预申请内存Static Node List中,取出第一个节点,存放Node信息, 并进行父子Node关系的链接;对于兄弟关系的Node的连接处理,使用链 表方式关联,若Hash索引开关开启,同时根据其Node名称为键值使用Hash 进行链接;

步骤四:若分析结果为Node下属的Attribute,则通过Xml Free Attribute  Linklist从预申请内存Static Attribute List中,取出第一个节点,存放Attribute 信息,进行兄弟Attribute的关系链接,并进行Node‑Attribute关系的链接;

步骤五:通过步骤三、步骤四的迭代算法之后,整个XML文档已映射 为Document内存树,在此基础上,可进行XML文档的任意元素节点的查 询;若Hash索引开关开启,通过Hash索引搜索;若Hash索引开关关闭, 通过Document树遍历搜索。

本发明的积极进步效果在于:本发明提高了XML解析的速度;同时解 决了在查询内存树只能通过全遍历的问题,使得应用能通过Hash索引快速 定位;在需解析新的XML文档时,对旧XML文档的内存树不进行内存释 放,而是采用清空使用状态的简单高效方法,使得XML解析器具备重用性。

图1为本发明基于可变内存预申请及HASH的快速XML解析方法的流 程图。

下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。

如图1所示,本发明基于可变内存预申请及HASH的快速XML解析方 法包括以下步骤:

步骤一:读取XML文档到Xml Content,并生成Document的Xml Root  Node节点。每个Xml Node节点由以下元素构成:Node节点的名值信息; 首尾子节点;兄弟节点;用于链接管理的前后节点;属性链表;以及用于快 速查询的Hash链表;

步骤二:对Xml Content进行语法分析,解析XML文档;语法分析指 示解析部分的分类,进行不同分支的处理;

步骤三:若分析结果为Node,则会进入迭代算法,通过Xml Free Node  Linklist从预申请内存Static Node List中,取出第一个节点(Xml Free Node  Linklist指向为空标志所有预申请内存使用完毕,则动态申请内存),存放 Node信息,并进行父子Node关系的链接。对于兄弟关系的Node的连接处 理,使用链表方式关联,若Hash索引开关开启,同时根据其Node名称为键 值使用Hash进行链接;

步骤四:若分析结果为Node下属的Attribute,则通过Xml Free Attribute  Linklist从预申请内存Static Attribute List中,取出第一个节点(Xml Free  Attribute Linklist指向为空标志所有预申请内存使用完毕,则动态申请内存), 存放Attribute信息,进行兄弟Attribute的关系链接,并进行Node‑Attribute 关系的链接;

步骤五:通过步骤三、步骤四的迭代算法之后,整个XML文档已映射 为Document内存树,在此基础上,可进行XML文档的任意元素节点的查 询。若Hash索引开关开启,通过Hash索引搜索;若Hash索引开关关闭, 通过Document树遍历搜索。

至此,解析及查询XML文档流程结束。本发明中的XML解析方法经 初始化后,可对不同的XML文档连续进行解析,在对过期XML文档的释 放过程中,采用清空使用状态的方式,进而以同一流程解析及查询下一个 XML文档。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理 解,这些仅是举例说明,在不背离本发明的原理和实质的前提下,可以对这 些实施方式做出多种变更或修改。因此,本发明的保护范围由所附权利要求 书限定。

本文发布于:2023-04-13 01:52:42,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/85713.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图