本发明专利技术公开了一种过滤标记语言中非法标签的方法,包括以下步骤:1.从标签构成的输入数据流中记录下:当前正要解析的标签的位置;上一个解析过的标签的位置;所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息;2.从标签构成的输入数据流读入第一个非注释的、合法的标签,记为curTag,作为递归函数的输入参数,进行递归解析过程;3.在基于递归的标记语言解析过程中,利用步骤1所记录的信息,采用忽略或虚拟的容错机制,识别并过滤非法标签。本发明专利技术不会因为网页中存在错误标签而中断解析过程,从而提高了浏览器的鲁棒性,也增强了用户的浏览舒适度。
【技术实现步骤摘要】
本专利技术涉及一种过滤标记语言(如HTML,XHTML,WML等)中非法标签的方法,适用于基于嵌入式微浏览器的标记语言的容错解析。
技术介绍
标记语言即标准通用标记语言SGML(Standard Generalized MarkupLanguage),由1986年发布的信息管理方面的国际标准(ISO8879)定义。SGML的主要目的是定义一种使用标签来表示数据的标记语言的语法。标签由包围在一个小于号(<)和一个大于号(>)之间的文本组成,例如<tag>。起始标签(start tag)表示一个特定区域的开始,例如<start>;结束标签(end tag)定义了一个区域的结束,除了在小于号之后紧跟着一个斜线(/)外,和起始标签基本一样,例如</end>。SGML还定义了标签的属性(attribute),它们是定义在小于号和大于号之间的值,例如<img src="picture.jpg">中,标签img包含名称是src的属性,其值为"picture.jpg"。SGML语言由于其规范性、可移植性等特点,非常适用于Web数据描述。故在其基础上衍生出一些著名的固定标签集的网页语言,如WWW的页面规范HTML,WAP2.0的页面规范XHTML,WAP1.2的页面规范WML;以及可扩展的标记语言,如XML。普通浏览器的标记语言的解析,特别是嵌入式微浏览器,一般缺少错误处理机制,当浏览非标准网页时,常因由一个标签的错误而停止整个解析过程,从而给用户造成浏览上的不便。
技术实现思路
本专利技术的目的在于提供一种过滤标记语言中非法标签的方法,以便浏览器正常显示输出,从而提高浏览器,特别是嵌入式微浏览器的鲁棒性。为实现上述目的,本专利技术通过以下的技术措施来实现:一种过滤标记语言中非法标签的方法,包括以下步骤:步骤1,从标签构成的输入数据流中记录下:-->(1)当前正要解析的标签的位置,(2)上一个解析过的标签的位置,(3)所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息;步骤2,从标签构成的输入数据流读入第一个非注释的、合法的标签,记为curTag,作为递归函数的输入参数,进行递归解析过程;步骤3,在基于递归(或其等价非递归)的标记语言解析过程中,利用步骤1所记录的信息,采用忽略或虚拟的容错机制,识别并过滤非法标签。本专利技术的递归解析过程如下:a)步骤2中读入的第一个非注释的、合法的标签curTag为递归函数的输入参数,b)存储curTag的名称和属性于特定的数据结构,c)从输入数据流读入下一个标签,记为nextTag,若输入数据流已经结束,则nextTag为空,d)若读入的下一个标签nextTag是开始标签,则将nextTag的值赋给curTag,回到(a)开始新一次递归,e)若读入的下一个标签nextTag是curTag的结束标签,则本次递归结束,f)若读入的下一个标签nextTag是标记语言中未定义的标签,则认为解析出错并调用容错机制一,g)若读入的下一个标签nextTag是其它结束标签,或nextTag为空,认为解析出错并调用容错机制二;h)最终的解析结果存储在步骤(b)每次访问的数据结构中。本专利技术步骤(f)所述容错机制一为:忽略标记语言中未定义的标签,跳回步骤(c),从输入数据流读入下一个标签,记为nextTag。本专利技术步骤(g)所述容错机制二为:(1)若nextTag之前有步骤1记录的开始标签的结束标签,则回退数据流,把步骤1记录的上一个解析过的标签的位置的值赋给步骤1记录的当前正要解析的标签的位置,使得下一次读到的标签值等于当前的nextTag值,本次递归结束;-->(2)若nextTag是之前无开始标签的结束标签,则忽略它,并跳回步骤(c),从输入数据流读入下一个标签,记为nextTag;(3)若nextTag为空,则本次递归结束。本专利技术递归解析(或其等价非递归)不会因为网页中存在错误标签而中断解析过程,这提高了浏览器从错误中恢复的能力,避免了当浏览非标准网页时,因一个标签的错误而停止整个网页解析,从而提高了浏览器的鲁棒性,也增强了用户的浏览舒适度。附图说明图1是本专利技术的流程框图。具体实施方式为了使本专利技术的目的、技术方案及其优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。实施例1一种过滤标记语言中非法标签的方法,具体包括以下步骤:1、从标签构成的输入数据流中记录下:当前正要解析的标签的位置;上一个解析过的标签的位置;所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息;2、从标签构成的输入数据流中读入的第一个非注释的、合法的标签curTag为递归函数的输入参数,3、存储curTag的名称和属性于特定的数据结构,4、从输入数据流读入下一个标签,记为nextTag,若输入数据流已经结束,则nextTag为空,5、若读入的下一个标签nextTag是开始标签,则将nextTag的值赋给curTag,回到步骤2开始新一次递归,6、若读入的下一个标签nextTag是curTag的结束标签,则本次递归结束,-->7、若读入的下一个标签nextTag是标记语言中未定义的标签,则认为解析出错并调用容错机制一,忽略标记语言中未定义的标签,跳回步骤4;8、若读入的下一个标签nextTag之前有步骤1记录的开始标签的结束标签,则回退数据流,把步骤1记录的上一个解析过的标签的位置的值赋给步骤1记录的当前正要解析的标签的位置,使得下一次读到的标签值等于当前的nextTag值,本次递归结束;9、若读入的下一个标签nextTag之前无开始标签的结束标签,则忽略它,并跳回步骤4;10、若读入的下一个标签nextTag为空,则本次递归结束。上述最终的解析结果存储在步骤3每次访问的数据结构中。如输入标签流为:<wml> <p> <abcdefg> </p></wml>该wml页面存在语法错误:标签<abcdefg>为wml语言中未定义的标签。使用上述的10个步骤对该页面进行解析。在进行到步骤7时,nextTag为<abcdefg>,是标记语言中未定义的标签,则跳转到步骤4,读入下一个标签</p>。故该错误标签被成功地过滤。实施例2如输入标签流为:<wml> <p></wml>该wml页面存在语法错误:标签<p>缺少结束标签</p>。使用实施例1中的10个步骤对该页面进行解析。在进行到步骤8时,发现虽然</wml>不是<p>的结束标签,但它是之前出现过的开始标签<wml>的结束标-->签,故回退数据流,使得下一次读到的nextTag仍为</wml>,且本次递归结束。从而在<p>和</wml>之间虚拟地插入了一个</p>,使得解析可以继续成功地进行。实施本文档来自技高网...
【技术保护点】
一种过滤标记语言中非法标签的方法,其特征在于包括以下步骤: 步骤1,从标签构成的输入数据流中记录下:(1)当前正要解析的标签的位置;(2)上一个解析过的标签的位置;(3)所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息; 步骤2,从标签构成的输入数据流读入第一个非注释的、合法的标签,记为curTag,作为递归函数的输入参数,进行递归解析过程; 步骤3,在递归(或其等价非递归)的标记语言解析过程中,利用步骤1所记录的信息,采用忽略或虚拟的容错机制,识别并过滤非法标签。
【技术特征摘要】
1、一种过滤标记语言中非法标签的方法,其特征在于包括以下步骤:步骤1,从标签构成的输入数据流中记录下:(1)当前正要解析的标签的位置;(2)上一个解析过的标签的位置;(3)所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息;步骤2,从标签构成的输入数据流读入第一个非注释的、合法的标签,记为curTag,作为递归函数的输入参数,进行递归解析过程;步骤3,在递归(或其等价非递归)的标记语言解析过程中,利用步骤1所记录的信息,采用忽略或虚拟的容错机制,识别并过滤非法标签。2、根据权利要求1所述的过滤标记语言中非法标签的方法,其特征在于,递归的标记语言解析过程如下:a)步骤2中读入的第一个非注释的、合法的标签curTag为递归函数的输入参数,b)存储curTag的名称和属性于特定的数据结构,c)从输入数据流读入下一个标签,记为nextTag,若输入数据流已经结束,则nextTag为空,d)若读入的下一个标签nextTag是开始标签,则将nextTag的值赋给curTag,回到(a)开始新一次递归,e)若读入的下一个...
【专利技术属性】
技术研发人员:郭华,廖建华,庞恩林,胡胜发,
申请(专利权)人:安凯广州微电子技术有限公司,
类型:发明
国别省市:81[中国|广州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。