Html片段的检测方法

文档序号:6536811阅读:178来源:国知局
Html片段的检测方法
【专利摘要】本申请公开了HTML片段的检测方法,该方法中利用专门的单标签参数S来记录当前检测位置之前最近的一个单标签,利用集合Z来记录当前已遍历到的但未匹配的所有开始标签,基于这些参数进行标签的匹配,并且,在检测到结束标签时,优先将其与最近一次检测到的单标签进行匹配,在无法匹配的情况下再进行双标签的匹配,在检测到错误时进行具体错误及错误位置的通知。本发明既可以对HTML片段中的单、双标签进行准确识别,同时还兼容由单标签与结束标签组成的双标签的格式,因此,采用本发明可以有效提高检测的准确度,并能对错误进行准确定位。
【专利说明】HTML片段的检测方法
【技术领域】
[0001]本发明涉及计算机互联网技术,特别是涉及一种超文本标记语言(HTML)片段的检测方法。
【背景技术】
[0002]在所见即所得的应用场景中,最常见的一个组件就是富文本编辑器。富文本编辑器提供了两种使用方式,其中一种使用方式是源码方式,该方式下需要用户手动输入HTML片段,进而进行渲染。此过程中浏览器需要对用户输入的HTML片段进行智能检测,以确保其符合HTML规范要求。
[0003]现有的HTML片段的检测方法,主要是检测HTML代码片段标签是否成对出现。首先收集HTML代码片段中所有的标签,包括开始标签和结束标签,然后按照一定的方式匹配从而检测是否匹配,比如计算同一标签的开始标签和结束标签的个数等。
[0004]上述方法存在如下问题:
[0005]1、功能单一、准确性低:该方法仅进行双标签的检测,即标签必须成对出现,有开始标签必须有相应的结束标签,而实际的HTML规范要求中是允许单标签的存在的,即一个单标签可以独立存在。因此,这种只检测双标签的方法会导致单标签被检测为错误的情况出现,从而无法正确识别单标签,降低检测的准确性,进而会导致浏览器不能准确显示用户需要的渲染效果。
[0006]2、对错误的定位能力弱:在进行检测后,仅能提示标签成对不匹配,不能给出详细的错误原因及错误标签,因此无法帮助用户快速定位到错误点以进行错误排查、解决问题。

【发明内容】

[0007]有鉴于此,本发明的主要目的在于提供一种HTML片段的检测方法,该方法可以提高HTML片段检测的准确度,并能对错误进行准确定位。
[0008]为了达到上述目的,本发明提出的技术方案为:
[0009]一种HTML片段的检测方法,包括:
[0010]a、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空;
[0011]b、判断当前的待检测标签Μ是否为空,如果是,则执行步骤c ;否则,执行步骤d ;
[0012]c、判断所述集合Z是否为空,如果是,则结束所述检测方法;否则,判定所述集合Z中的所有开始标签没有对应的结束标签并且通知系统,结束所述检测方法;
[0013]d、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤g ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤g,否则,执行步骤e ;
[0014]e、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤g ;否则,将所述S的值设置为空,执行步骤f ;[0015]f、判断所述集合Z是否为空,如果是,则判定所述Μ处存在多余的结束标签并通知系统,结束所述检测方法;否则,取出最后进入所述集合Ζ的标签Ν,将所述标签Ν从所述集合中删除,判断所述Ν与所述Μ的值是否相等,如果是,则执行步骤g,否则,判定所述Μ处没有与所述Ν对应的结束标签并通知系统,结束所述检测方法;
[0016]g、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行所述步骤b。
[0017]一种HTML片段的检测方法,包括:
[0018]a、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空;
[0019]b、判断当前的待检测标签Μ是否为空,如果是,则执行步骤c ;否则,执行步骤d ;
[0020]c、判断所述集合Z是否为空,如果是,则结束所述检测方法;否则,按照进入集合的顺序的逆序,依次为所述集合Z中的每个标签,构造对应的结束标签并置于所述HTML片段的尾部,结束所述检测方法;
[0021]d、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤g ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤g,否则,执行步骤e ;
[0022]e、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤g;否则,执行步骤f;
[0023]f、判断所述集合Z是否为空,如果是,则将所述Μ从所述HTML片段中删除,执行步骤g ;否则,将所述s的值设置为空,取出最后进入所述集合Z的标签N,将所述标签N从所述集合中删除,当所述N与所述Μ的值相等时,执行步骤g ;当所述N与所述Μ的值不相等时,构造所述Ν对应的结束标签,并将所构造的标签插入至所述Μ所在的位置,作为所述Μ的在前相邻标签,将所述Μ作为当前的待检测标签,执行步骤b ;
[0024]g、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行步骤b。
[0025]综上所述,本发明提出的HTML片段的检测方法,考虑了对HTML片段中单标签的识别,利用专门的单标签参数S来记录当前检测位置之前最近的一个单标签,利用集合Z来记录当前已遍历到的但未匹配的所有开始标签,基于这些参数进行标签的匹配,并且,在检测到结束标签时,优先将其与最近一次检测到的单标签进行匹配,在无法匹配的情况下再进行双标签的匹配,在检测到错误时进行具体错误及错误位置的通知。如此,既可以对HTML片段中的单、双标签进行准确识别,同时还兼容由单标签与结束标签组成的双标签的格式,因此,可以有效提高检测的准确度,且能对错误进行准确定位。
【专利附图】

【附图说明】
[0026]图1为本发明实施例一的流程示意图;
[0027]图2为本发明实施例二的流程示意图。
【具体实施方式】
[0028]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
[0029]本发明的核心思想是:对HTML片段中的单标签进行识别,并在检测到结束标签时优先将其与最近一次检测到的单标签进行匹配,若无法匹配再进行双标签的匹配,另外,利用集合Z来保存当前未匹配的所有开始标签,如此,既可以对HTML片段中的单、双标签进行准确识别,同时还兼容由单标签与结束标签组成的双标签的格式,因此,可以有效提高检测的准确度。
[0030]图1为本发明实施例一的HTML片段检测方法流程示意图,如图1所示,该实施例主要包括:
[0031]步骤101、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空。
[0032]本步骤,用于实现检测的初始化过程。这里,所述单标签参数S用于记录最近一次检测到的单标签,即当前检测位置之前最近的一个单标签,以便在检测到结束标签时,会优先考虑其是否与最近的单标签匹配,以实现对由单标签与结束标签组成的双标签的格式即<label></label> 格式的兼容。
[0033]集合Z则用于记录当前未匹配的开始标签,以便在遇到结束标签时,据此进行结束标签的匹配,以实现双标签的检测。
[0034]步骤102、判断当前的待检测标签Μ是否为空,如果是,则执行步骤103 ;否则,执行步骤105。
[0035]这里,如果当前的待检测标签Μ为空,则说明已经检测到了 HTML片段尾部,即遍历了该片段中的所有标签,此时,需要转入步骤103,以判断当前是否存在没有匹配的开始标签,进而据此判断是否存在丢失结束标签的情况。
[0036]步骤103?104、判断所述集合Z是否为空,如果是,则结束所述检测方法;否则,判定所述集合Z中的所有开始标签没有对应的结束标签并且通知系统,结束所述检测方法。
[0037]本步骤中,如果集合Z不为空,则说明当前已遍历的开始标签中存在没有匹配到结束标签的标签,而此时已遍历完HTML片段,因此,可以确定当前出现了错误,即判定所述集合Z中的所有开始标签没有对应的结束标签,此时需要将该错误通知给系统,具体为返回所述集合Z中的所有开始标签,并指示出这些标签没有对应的结束标签。
[0038]如果集合Z为空,则说明HTML片段中不存在错误问题。
[0039]步骤105?108、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤117 ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤117,否则,执行步骤109。
[0040]这里,在判断出Μ为开始标签时,说明当前S记录的单标签之后的下一个标签为开始标签而不是结束标签,此种情况下,不需要再将S所指示单标签与后面的结束标签进行匹配了,因此,需要将其值设置为空。
[0041]本步骤中,单标签的具体判断方法同现有系统,即将其与系统所规定的单标签进行匹配,如果匹配上,则说明是单标签。
[0042]根据现有规范,开始标签与结束标签的区分是由标签名前是否有“/”字符进行判断,如<div>和〈/span〉标签,其中第一个标签为开始标签,标签名为div,第二个为结束标签,标签名为span。
[0043]本步骤中,在Μ非空的情况下,需要首先判断该标签是不是单标签,如果是,则利用参数S记录该标签,如果不是,则确定该标签是否为开始标签,如果是开始标签,则将该标签置入集合Ζ中,以便在后续的检测过程中检测到结束标签时,基于此,进行双标签的匹配;如果不是开始标签,则说明是结束标签,此时需要进入步骤109执行相应的标签匹配过程。
[0044]步骤109?111、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤117 ;否则,将所述S的值设置为空,执行步骤112。
[0045]本步骤中,当所述S的值等于所述Μ的值时,说明当前的结束标签Μ与最近一次检测到的单标签相匹配,Μ处不存在错误,从而完成当前检测到的标签Μ的匹配,因此可以将所述S的值设置为空后执行步骤117,继续下一标签的匹配过程。
[0046]当所述S的值不等于所述Μ的值时,则需要将所述S的值设置为空后执行步骤112?116,分情况判断是否存在结束标签多余或丢失的错误。
[0047]步骤112?116、判断所述集合Ζ是否为空,如果是,则判定所述Μ处存在多余的结束标签并通知系统,结束所述检测方法;否则,取出最后进入所述集合Ζ的标签Ν,将所述标签Ν从所述集合中删除,判断所述Ν与所述Μ的值是否相等,如果是,则执行步骤117,否贝1J,判定所述Μ处没有与所述Ν对应的结束标签并通知系统,结束所述检测方法。
[0048]本步骤中,当集合Ζ为空时,说明在所述Μ之前不存在与之相匹配的开始标签了,因此,可以判定标签Μ为多余的结束标签,而当集合Ζ不为空时,则取出最后加入该集合的标签Ν,判断Ν与Μ的值是否相同,即判断是不是匹配,如果相同,则说明匹配,此时执行步骤117进行下一标签的检测;如果不同,则说明Ν没有对应的结束标签,因此需要将该问题通知给系统,即,返回Μ处没有与所述Ν对应的结束标签的错误信息,以便用户据此进行相应的修改。
[0049]步骤117、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行步骤102。
[0050]本步骤,用于对待检测标签进行更新,即将所述Μ之后的下一个标签作为新的待检测标签,以遍历所述HTML片段中的标签进行相应的检测。
[0051]较佳地,在具体实现上述实施例时,所述集合Z可以采用栈的方式实现,当然也不限于其他形式的数据结构,在此不再赘述。
[0052]从上述实施例中,可以看出本发明通过区分单标签和双标签,可以准确地检测出HTML片段中出现的丢失或多余结束标签的错误。当检测到一处错误时,便进行该错误的提示,即返回相应的错误定位信息和错误类型,以供用户基于此进行相应的修改。在实际应用中,还可以在检测到错误时,由检测方案自动进行相应的错误纠正,使检测方案具有智能容错功能。具体可以采用下述实施例二的方案实现这一目的。
[0053]图2为本发明实施例二的HTML片段检测方法流程示意图,如图2所示,该实施例主要包括:
[0054]步骤201、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空。
[0055]本步骤同步骤101,在此不再赘述。[0056]步骤202、判断当前的待检测标签Μ是否为空,如果是,则执行步骤203 ;否则,执行步骤205。
[0057]203?204、判断所述集合Ζ是否为空,如果是,则结束所述检测方法;否则,按照进入集合的顺序的逆序,依次为所述集合Ζ中的每个标签,构造对应的结束标签并置于所述HTML片段的尾部,结束所述检测方法。
[0058]本步骤与前述实施例所不同的是,在检测到存在开始标签没有结束标签的情况时,为这些开始标签分别构造对应的结束标签后依次置于HTML片段的尾部,以实现相应的智能纠错的功能。
[0059]步骤205?208、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤216 ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤216,否则,执行步骤209。
[0060]这里,在判断出Μ为开始标签时,说明S中的单标签后的下一个标签为开始标签,此种情况下,不需要再将S所指示单标签与后面的结束标签进行匹配了,因此,需要将其值设置为空。
[0061]步骤209?210、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤216 ;否则,执行步骤211。
[0062]步骤211?215、判断所述集合Ζ是否为空,如果是,则将所述Μ从所述HTML片段中删除,执行步骤216 ;否则,将所述S的值设置为空,取出最后进入所述集合Z的标签N,将所述标签N从所述集合中删除,当所述N与所述Μ的值相等时,执行步骤216,当所述Ν与所述Μ的值不相等时,构造所述Ν对应的结束标签,并将所构造的标签插入至所述Μ所在的位置,作为所述Μ的在前相邻标签,将所述Μ作为当前的待检测标签,执行步骤202。
[0063]本步骤与前述实施例所不同的是,在判断出存在多余的结束标签时将其删除,在判断出存在丢失结束标签时,构造相应的结束标签并插入在当前的检测位置的前面,以实现相应的智能纠错的功能。
[0064]步骤216、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行步骤202。
[0065]较佳地,同上述实施例一,所述集合Ζ可以采用栈的方式实现。
[0066]综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种HTML片段的检测方法,其特征在于,包括:a、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空;b、判断当前的待检测标签Μ是否为空,如果是,则执行步骤c;否则,执行步骤d ;c、判断所述集合Z是否为空,如果是,则结束所述检测方法;否则,判定所述集合Z中的所有开始标签没有对应的结束标签并且通知系统,结束所述检测方法;d、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤g ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤g,否则,执行步骤e ;e、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤g ;否则,将所述S的值设置为空,执行步骤f ;f、判断所述集合Z是否为空,如果是,则判定所述Μ处存在多余的结束标签并通知系统,结束所述检测方法;否则,取出最后进入所述集合Ζ的标签Ν,将所述标签Ν从所述集合中删除,判断所述Ν与所述Μ的值是否相等,如果是,则执行步骤g,否则,判定所述Μ处没有与所述Ν对应的结束标签并通知系统,结束所述检测方法;g、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行所述步骤b。
2.根据权利要求1所述的方法,其特征在于,所述集合Z采用栈的方式实现。
3.—种HTML片段的检测方法,其特征在于,包括:a、将需要检测的HTML片段的首个标签作为当前的待检测标签;将单标签参数S的初始值设置为空;将用于记录当前未匹配的开始标签的集合Z设置为空;b、判断当前的待检测标签Μ是否为空,如果是,则执行步骤c;否则,执行步骤d ;c、判断所述集合Z是否为空,如果是,则结束所述检测方法;否则,按照进入集合的顺序的逆序,依次为所述集合Z中的每个标签,构造对应的结束标签并置于所述HTML片段的尾部,结束所述检测方法;d、判断所述Μ是否为单标签,如果是,则将当前的单标签参数S的值设置为所述Μ的值,执行步骤g ;否则,判断所述Μ是否为开始标签,如果是,则将所述Μ置入所述集合Ζ中,将所述S的值设置为空,执行步骤g,否则,执行步骤e ;e、判断所述S的值是否等于所述Μ的值,如果是,则将所述S的值设置为空,执行步骤g;否则,执行步骤f;f、判断所述集合Z是否为空,如果是,则将所述Μ从所述HTML片段中删除,执行步骤g;否则,将所述S的值设置为空,取出最后进入所述集合Z的标签N,将所述标签N从所述集合中删除,当所述N与所述Μ的值相等时,执行步骤g ;当所述N与所述Μ的值不相等时,构造所述Ν对应的结束标签,并将所构造的标签插入至所述Μ所在的位置,作为所述Μ的在前相邻标签,将所述Μ作为当前的待检测标签,执行步骤b ;g、将所述HTML片段中所述Μ之后的下一个标签作为当前的待检测标签,执行步骤b。
4.根据权利要求3所述的方法,其特征在于,所述集合Z采用栈的方式实现。
【文档编号】G06F17/30GK103745003SQ201410035578
【公开日】2014年4月23日 申请日期:2014年1月24日 优先权日:2014年1月24日
【发明者】王海昕 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1