一种xml文件检索方法及装置的制造方法

文档序号:9597919阅读:432来源:国知局
一种xml文件检索方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种XML文件检索方法及装置。
【背景技术】
[0002]NodeJS是一个基于Google V8引擎建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。NodeJS使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。NodeJS作为服务端应用技术,已经慢慢成熟,社区中有大量的基于NodeJS的开源模块,使得它使用起来方便了很多。
[0003]XML (extensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。作为服务端技术,XML作为配置文件和数据传输协议被大量使用,包含的内容极其丰富。然而在NodeJS上使用JavaScript语言对XML信息的检索很不方便。目前,也没有像Dom4j这样强大的解析工具来处理XML文件。作为XML的一种扩展,HTML (HyperText Markup Language,超级文本标记语言)作为页面展示的主要技术,文件的数量更是庞大,所包含的信息量更大,对这类文件的检索需求必然是很大的。而NodeJS上对HTML的处理支持不是很好。
[0004]参见图1,目前在NodeJS上解析XML文件时,通常将要操作的XML文件加载到内存中,然后解析成Document对象,再进行DOM (Document Object Model文档对象模型)操作。而通过Document解析器构造D0M对象这种方式,需要将整个XML文件全部加载进内存才能进行解析操作,如果文件比较大,对内存消耗是非常大的;另外,构造一个可操作的Document对象,需要将每个元素构造成对象,对于比较大的文件效率会比较低。

【发明内容】

[0005]本发明所要解决的技术问题在于提供一种XML文件检索方法及装置,用以解决现有技术在NodeJS上检索XML大文件时内存消耗严重甚至无法解析的问题。
[0006]依据本发明的一个方面,提供一种XML文件检索方法,包括:
[0007]通过SAX解析器对输入的XML字符串进行解析;
[0008]当解析到新的元素后,获取元素的描述信息;
[0009]当获取的所述描述信息与预先设置的检索规则相匹配时,则将所述描述信息保存至结果集合,同时通知用户处理检索进程。
[0010]进一步地,在设置检索规则时,包括:
[0011]利用样式解析器对用户输入的样式规则进行解析,并生成子样式列表;
[0012]根据所述子样式列表中的每一个子样式构造简单选择器;
[0013]根据子样式之间的逻辑关系构造逻辑选择器;
[0014]所述简单选择器与所述逻辑选择器组合成一个样式选择器,用于描述所述检索规则。
[0015]进一步地,将获取的所述描述信息与预先设置的检索规则进行匹配时,包括:
[0016]获取元素的描述信息,若所述描述信息符合所述简单选择器描述的规则,则继续进行逻辑关系匹配;
[0017]当所述简单选择器满足所述逻辑选择器定义的逻辑关系时,则该元素匹配成功。
[0018]进一步地,所述方法包括:
[0019]当新的XML字符串输入进来时,将所述XML字符串进行缓存后,再交由所述SAX解析器进行解析。
[0020]进一步地,所述方法包括:
[0021]当所述SAX解析器解析到新的元素开始时,将新元素压入堆栈;
[0022]当所述SAX解析器解析到该元素的元素结束符时,将该元素出栈。
[0023]进一步地,所述方法包括:
[0024]当解析完一段XML后,将当前的元素栈进行缓存;
[0025]当有新的XML文件输入时,则恢复使用之前缓存的所述元素栈。
[0026]依据本发明的一个方面,提供一种XML文件检索装置,包括:
[0027]解析模块,用于通过SAX解析器对输入的XML字符串进行解析;
[0028]获取模块,用于当解析到新的元素后,获取元素的描述信息;
[0029]匹配模块,用于当获取的所述描述信息与预先设置的检索规则相匹配时,则将所述描述信息保存至结果集合,同时通知用户处理检索进程。
[0030]进一步地,所述装置还包括规则设置模块:
[0031]用于在设置检索规则时,利用样式解析器对用户输入的样式规则进行解析,并生成子样式列表;
[0032]根据所述子样式列表中的每一个子样式构造简单选择器;
[0033]根据子样式之间的逻辑关系构造逻辑选择器;
[0034]所述简单选择器与所述逻辑选择器组合成一个样式选择器,用于描述所述检索规则。
[0035]进一步地,所述匹配模块具体用于:
[0036]获取元素的描述信息,若所述描述信息符合所述简单选择器描述规则,则继续进行逻辑关系匹配;
[0037]当所述简单选择器之间的关系满足所述逻辑选择器定义的逻辑关系时,则该元素匹配成功。
[0038]进一步地,所述装置包括第一缓存模块:
[0039]用于当新的XML字符串输入进来时,将所述XML字符串进行缓存后,再交由所述SAX解析器进行解析。
[0040]进一步地,所述装置包括第二缓存模块:
[0041]当所述SAX解析器解析到新的元素开始时,将新元素压入堆栈;
[0042]当所述SAX解析器解析到该元素的元素结束符时,将该元素出栈。
[0043]进一步地,所述装置包括第三缓存模块:
[0044]用于当解析完一段XML后,将当前的元素栈进行缓存;
[0045]当有新的XML文件输入时,则恢复使用之前缓存的所述元素栈。
[0046]本发明有益效果如下:
[0047]本发明通过采用SAX解析器,可以对XML文件边解析边处理,不需要将文件预先读进内存,可以有效节省内存空间;以事件的方式通知检索进度,可以更方便地控制检索的进程;通过使用样式选择器作为对要查找的内容的描述手段,可以表示出XML绝大部分的信息,非常通用,可以节省开发工作;基于样式选择器的特性,还可以解析HTML文件,对于前后台HTML这种非结构化数据的检索用处会非常大。
[0048]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
【附图说明】
[0049]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0050]图1为现有技术中,在NodeJS上解析XML文件的流程图;
[0051]图2为本发明实施例中,XML文件检索方法的流程示意图;
[0052]图3为本发明实施例中,检索器的工作流程示意图;
[0053]图4为本发明实施例中,设置检索规则的流程示意图;
[0054]图5为本发明实施例中,对XML文件的检索流程示意图;
[0055]图6为本发明实施例中,XM1文件检索装置的结构示意图。
【具体实施方式】
[0056]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057]为了解决在NodeJS上类非结构化数据的检索,尤其是体积比较大的XML文件的检索问题,本发明提供一种基于JavaScript语言的XML文件检索方法。该方法是采用SAX (Simple API for XML的缩写,一种基于事件的解析XML的引擎)解析器边解析边处理,不需要预先将XML文件读进内存,可以有效节省内存空间,同时本发明中检索到相匹配的元素后,可以以事件的方式通知用户,不需要将文件完全处理完后,再通知用户检索结果,用户可以根据当前的检索结果确定是否继续检索进程,更方便了检索进程的控制。
[0058]如图2所示,本发明提供的XML文件检索方法,具体包括如下步骤:
[0059]步骤S101,SAX解析器对输入的XML字符串进行解析;
[0060]步骤S102,当解析到新的元素后,获取元素的描述信息;
[0061]步骤S103,当该描述信息与预先设置的检索规则相匹配时,将该元素的描述信息保存至结果集合中,同时通知用户处理检索进程。
[0062]以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
[0063]本发明中SAX解析器主要负责解析XML字符串,一遍扫描,一遍解析。当解析到新的元素时,以事件的方式将解析结果通知检索器。检索器是对外公开的对象,根据检索规则匹配SAX解析器解析到的信息,以事件的方式向用户通知检索的进度及结果。
[0064]参见图3,在进行解析前,检索器需进行初始化。用户通过应用程序的输入后,构造检索器对象。检索器在初始化时,构造SAX对象。SAX解析器对SAX对象进行解析生成SAX解析对象。检索器根据SAX返回的SAX解析对象注册检索事件。该事件用于当SAX解析器解析到相应元素后,通知检索器进行匹配操作。检索器注册完检索事件后,生成检索器对象。应用程序段根据该检索器对象注册监听事件。当检索器检索到匹配内容后,以事件的方式通知应用程序目前的检索进度和结果。用户可以更方便的控制检索的进程,当找到要找的内容后,可以立即停止检索,而且也可以中途挂起,并且还可以恢复继续执行。
[0065]在检索前,检索器中预先设置检索规则。如图4所示,在设置规则时,用户通过应用程序设置需要的检索规则。样式解析器对用户输入的样式规则进行解析,并生成子样式列表。检索器根据子样式列表中的每一个子样式构造简单选择器,根据子样式之间的逻辑关系构造逻辑选择器。这些简单选择器和逻辑选择器最终组合成一个样式选择器(CSSSelector),形成一颗选择器树,最外层的那个选择器是树根,所有简单选择器是叶子节点,而逻辑选择器则是树枝。选择器树就可以表示出用户输入的所有检索规则。
[0066]具体地,简单选择器是是原子的不可再分的最小匹配单元,例如,包括元素名、元素的属性以及该元素所包含的文本内容
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1