【技术实现步骤摘要】
本专利技术总的来说涉及文档数据处理领域,更具体地说,涉及一种新的不同于当前普遍使用的SAX(Simple API for XML)和DOM(Document Object Model)方式的XML文档解析实现方法及其解析装置,具有可基于定制的应用要求(例如用户定制的解析要求)进行解析并且提高XML文档解析性能的特点。
技术介绍
XML(可扩展的标记语言)是一种结构化的文本标签语言,主要由标签、标签值、属性、属性值、特殊处理指令、注释等构成,由于其开放性,可扩展性,语法严格等优势,目前已经广泛用于各种数据存储和数据通信领域。目前XML的数据解析有两种主流技术SAX(Simple API forXML)和DOM(Document Object Model),两种技术实现原理不同,如图1所示SAX基于事件触发方式进行解析,输入XML文档100,经过SAX解析器101,解析器顺序的从XML文档中读数据,当发现特殊符号(如标签的开始,结束等)出现,则以事件的方式向应用层模块103进行通报,当应用层处理完成后返回SAX解析器继续后续的处理,直到文档结束或者应用层要求终止解 ...
【技术保护点】
一种解析文档的方法,该方法按照定制的应用要求,对XML文档进行定制解析,该方法包括步骤:按照定制的应用要求确定对所述XML文档进行解析的范围;基于所确定的解析范围对所述XML文档进行解析,以便从所述XML文档获得与所述应用要 求相匹配的信息。
【技术特征摘要】
1.一种解析文档的方法,该方法按照定制的应用要求,对XML文档进行定制解析,该方法包括步骤按照定制的应用要求确定对所述XML文档进行解析的范围;基于所确定的解析范围对所述XML文档进行解析,以便从所述XML文档获得与所述应用要求相匹配的信息。2.如权利要求1所述的解析文档的方法,其中所述定制的应用要求是定制的解析指令,以及其中,所述的按照定制的应用要求确定对所述XML文档进行解析的范围的步骤包括通过对所述定制的解析指令进行解析,创建包含有关需要从所述XML文档获得的内容的项目的信息的指令树的步骤。3.如权利要求2所述的解析文档的方法,其中所述指令树包括表示需要从所述XML文档获得的相应标签的、代表所述指令树的相应节点的标签名称的节点名称数据元素TagName、表示是否需要解析相应节点的属性的节点属性解析参数IfNeedParseAttr、表示是否需要解析相应节点的下一级子节点的下级节点解析参数Son,以及其中,所述的创建指令树的步骤包括从定制解析指令中读起始子字符串,判断读出的子字符串的值是否为空、″/tag″格式和以″/tag/″为首的字符串中的任意一种(S601),并基于判断结果执行以下的操作如果子字符串值为空,或不是″/tag″格式(S602),或不以″/tag/″为首的字符串,则错误退出定制的解析指令的解析过程;如果子字符串值为″/tag″格式,创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″(S603),节点属性解析参数IfNeedParseAttr的值为false,表示不需要解析根节点的属性,下级节点解析参数Son为NULL,表示不需要解析下一级子节点,结束指令树的构造正常退出;如果子字符串值是以″/tag/″为首的字符串(S604),创建指令树根节点,设置根节点名称数据元素TagName的值为″tag″、节点属性解析参数IfNeedParseAttr的值为false、下级节点解析参数Son指向一个新创建的指令列表,所述指令列表包括与根节点下的子节点对应的子节点名称数据元素TagName、表示是否需要解析相应子节点的属性的子节点属性解析参数IfNeedParseAttr、表示是否需要解析相应子节点的下一级子节点的下级节点解析参数Son,以所述定制的指令的剩余子字符串作为输入参数,逐级构造所述指令树的其余各层子节点。4.如权利要求3所述的解析文档的方法,其中,所述逐级构造所述指令树的其余各层子节点的步骤包括从所述定制的指令的剩余子字符串抽取需要解析的、所述XML文档的子标签的信息;对于每个需要解析的子标签,执行以下操作根据所述定制的指令判断是否需要解析该子标签的属性以及是否需要解析其下一级子标签,如果需要解析其属性,将与该子标签对应的指令树的子节点的节点属性解析参数IfNeedParseAttr的值设置为true;如果需要解析其下一级子标签,则使该子标签对应的指令树的子节点的下级节点解析参数Son指向与该需要解析的下一级子标签对应的空的新的指令列表,并将该子节点加入到上一级节点对应的指令列表中;如果不需要解析其下一级子标签,则将该子标签对应的指令树的子节点的下级节点解析参数Son设置为NULL,并将该子节点加入到上一级节点对应的指令列表中。5.如权利要求1-4中任一项所述的解析文档的方法,其中所述的基于所确定的解析范围对XML文档进行解析的步骤生成包含与所述定制指令相匹配的信息的内存树,所述内存树包括表示内存树的相应节点的名称的标签名称参数Name、表示是否需要解析XML文档中相应标签的属性的标签属性解析参数IfParseAttr、表示相应标签的属性的标签属性参数Attribute、表示是否需要解析相应标签的子标签的子标签解析参数IfParseValue、表示本标签的值的标签值参数Value,所述文档解析步骤包括子步骤从所述XML文档的字符串流中读出有效子字符串(S700);判断读出的有效子字符串是否为开始标签(S701)如果不是开始标签,则出错退出文档解析过程(S703);如果是开始标签,则进一步判断所述指令树的根节点对应的根节点名称参数TagName是否与读出的开始标签名一致,如果不一致,则出错退出(S703);如果一致,则创建内存树的根节点,设置根节点对应的标签名称参数Name为开始标签名、标签属性解析参数IfParseAttr为false、标签属性参数Attribute为NULL;进一步判断此根开始标签是否为空标签(S704)如果是空标签(S705),设置根节点的子标签解析IfParseValue为false、标签值Value为NULL,结束文档解析过程,正常退出,如果不是空标签,则继续从XML文档中读有效子字符串,并执行如下步骤如果读出的有效子字符串是标签值(S708),则直接使根节点的对应子标签解析参数IfParseValue为false、标签值参数Value指向此标签值字符串,继续从XML文档中读有效子字符串,判断是否是根标签的结束标签,是则结束文档解析正常退出,忽略未处理的后续字符流;如果不是根标签的结束标签,则出错退出文档解析过程;如果读出的有效子字符串是结束标签(S709),则判断是否是根节点的结束标签,是则设置根节点的对应子标签解析参数IfParseValue为false、标签值...
【专利技术属性】
技术研发人员:周毅,
申请(专利权)人:UT斯达康通讯有限公司,
类型:发明
国别省市:86[中国|杭州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。