19.2. sgmllib —简单的 SGML 解析器

自 2.6 版起弃用:sgmllib模块已在 Python 3 中删除。

该模块定义了一个SGMLParser类,该类用作解析以 SGML(标准通用标记语言)格式设置的文本文件的基础。实际上,它没有提供完整的 SGML 解析器-仅解析 HTML 所使用的 SGML,并且该模块仅作为htmllib模块的基础存在。 HTMLParser模块中提供了另一个支持 XHTML 并提供稍微不同的接口的 HTML 解析器。

还定义了一个 exception:

2.1 版中的新Function。

SGMLParser个实例具有以下方法:

名称已被翻译成小写。 * value *中的双引号和反斜杠以及已知的字符引用和已知的实体引用以分号终止(通常,实体引用可以由任何非字母数字字符终止)已得到解释,但这会 break 非常常见的情况当eggs是有效的实体名称时,则为<A HREF="url?spam=1&eggs=2">

例如,对于标签<A HREF="http://www.cwi.nl/">,此方法将称为unknown_starttag('a', [('href', 'http://www.cwi.nl/')])。基本实现只使用* attribute 作为唯一参数调用 method *。

2.5 版中的新Function:在属性值内处理实体和字符引用。

在版本 2.5 中更改:使用convert_charref()而不是对转换进行硬编码。

2.5 版的新Function。

2.5 版的新Function。

在版本 2.5 中更改:使用convert_entityref()而不是对转换进行硬编码。

2.5 版的新Function。

除了覆盖或扩展上面列出的方法外,派生类还可以定义以下形式的方法来定义对特定标签的处理。Importing 流中的标签名称是大小写无关的。方法名称中出现的* tag *必须小写:

请注意,解析器会维护一堆未找到结束标记的开放元素。仅由start_tag()处理的标签被压入该堆栈。对于这些标签,end_tag()方法的定义是可选的。对于由do_tag()unknown_tag()处理的标签,不需要定义end_tag()方法;如果定义,将不使用。如果标记同时存在start_tag()do_tag()方法,则start_tag()方法优先。

首页