首页> 中国专利> 一种过滤标记语言中非法标签的方法

一种过滤标记语言中非法标签的方法

摘要

本发明公开了一种过滤标记语言中非法标签的方法,包括以下步骤:1.从标签构成的输入数据流中记录下:当前正要解析的标签的位置;上一个解析过的标签的位置;所有尚未解析到其结束标签的起始标签;且在解析的过程中,不断更新上述三个记录信息;2.从标签构成的输入数据流读入第一个非注释的、合法的标签,记为curTag,作为递归函数的输入参数,进行递归解析过程;3.在基于递归的标记语言解析过程中,利用步骤1所记录的信息,采用忽略或虚拟的容错机制,识别并过滤非法标签。本发明不会因为网页中存在错误标签而中断解析过程,从而提高了浏览器的鲁棒性,也增强了用户的浏览舒适度。

著录项

  • 公开/公告号CN101458683A

    专利类型发明专利

  • 公开/公告日2009-06-17

    原文格式PDF

  • 申请/专利权人 安凯(广州)软件技术有限公司;

    申请/专利号CN200710032441.X

  • 发明设计人 郭华;廖建华;庞恩林;胡胜发;

    申请日2007-12-14

  • 分类号G06F17/30;

  • 代理机构广州知友专利商标代理有限公司;

  • 代理人宣国华

  • 地址 510663 广东省广州市天河科技园软件园高唐新建区高普路1033号6楼

  • 入库时间 2023-12-17 22:10:28

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-04-06

    授权

    授权

  • 2009-08-12

    实质审查的生效

    实质审查的生效

  • 2009-06-17

    公开

    公开

说明书

技术领域

本发明涉及一种过滤标记语言(如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>,使得解析可以继续成功地进行。

实施例3

如输入标签流为:

<wml>

     <p>

     </a>

     </p>

</wml>

该wml页面存在语法错误:标签</a>没有相配对的开始标签。

使用实施例1中的10个步骤对该页面进行解析。在进行到步骤9时,发现</a>不是<p>的结束标签,且之前没有开始标签<a>出现,故忽略该标签,并跳转到步骤4,继续读入下一个标签</p>,从而使得解析可以继续成功地进行。

实施例4

如输入标签流为:

<wml>

     <p>

     </p>

该wml页面存在语法错误:页面最后缺少结束标签</wml>。

使用实施例1中的10个步骤对该页面进行解析。在进行到步骤10时,发现nextTag为空(因为输入数据流已经结束),则结束本次递归。从而在最后虚拟地插入了一个</wml>,使得解析可以继续成功地进行。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的包保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号