8.7. 给属性值加引号

comp.lang.python 上的一个常见问题是 “我有一些 HTML 文档,属性值没有用引号括起来,并且我想将它们全部括起来,我怎么才能实现它呢?[7] (一般这种事情的出现是由于一个项目经理加入到一个大的项目中来,而他又抱着 HTML 是一种标记语言的教条,要求所有的页面必须能够通过 HTML 校验器的验证。而属性值没有被引号括起来是一种常见的对 HTML 规范的违反。) 不管什么原因,未括起来的属性值通过将 HTML 送进 BaseHTMLProcessor 可以容易地修复。

BaseHTMLProcessor 消费 (consume) HTML (因为它是从 SGMLParser 派生来的) 并生成等价的 HTML。但是这个 HTML 输出与输入的并不一样。标记和属性名最终会转化为小写字母,即使它们可能以大写字母开始或是大小写的混合形式。属性值将被双引号引起来,即使它们原来可能是用单引号括起来的或根本没有括起来。这就是最后我们可以受益的边际效应。

例 8.16. 给属性值加引号

>>> htmlSource = """        
...     <html>
...     <head>
...     <title>Test page</title>
...     </head>
...     <body>
...     <ul>
...     <li><a href=index.html>Home</a></li>
...     <li><a href=toc.html>Table of contents</a></li>
...     <li><a href=history.html>Revision history</a></li>
...     </body>
...     </html>
...     """
>>> from BaseHTMLProcessor import BaseHTMLProcessor
>>> parser = BaseHTMLProcessor()
>>> parser.feed(htmlSource) 
>>> print parser.output()   
<html>
<head>
<title>Test page</title>
</head>
<body>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="toc.html">Table of contents</a></li>
<li><a href="history.html">Revision history</a></li>
</body>
</html>
请注意,时时彩计划软件公式:在 <a> 标记中的 href 属性值没有被适当地括起来 (还要注意,除了文档字符串之外,我们还将三重引号用到了 doc string 之外的其它地方,并且是不会少于直接在 IDE 中的使用。它们非常有用。)
装填分析器。
使用定义在 BaseHTMLProcessor 中的 output 函数,我们得到单个字符串的输出,并且属性值被完全括起来了。让我们想一下这里实际上发生了多少事:SGMLParser 分析整个 HTML 文档,将其分解为一片片的标记、引用、数据等等。BaseHTMLProcessor 使用这些元素来重新构造 HTML 的片段 (如果您想查看的话它们仍然保存在 parser.pieces 中) 。最后,我们调用 parser.output,它将所有的 HTML 片段连接成一个字符串。

Footnotes

[7] 好吧,其实并不是那么普通的一个问题。在那不都是问 “我应该用何种编辑器来写 Python 代码?” (回答:Emacs) 或 “PythonPerl 是好还是坏?” (回答:“PerlPython 差,因为人们想让它差的。” ――Larry Wall,1998 年 10 月 14 日) 但是关于 HTML 处理的问题,或者这种提法或者另一种提法,大约一个月就要出现一次,在这些问题之中,这个问题是最常见的一个。

时时彩五星独胆必中法 时时彩公式计算软件 天机时时彩官网 加拿大时时彩开奖网站 中国福彩时时彩平台
江西时时彩开奖号码新 做博彩平台赚钱吗 时时彩源码出售 大连时时彩玩法 阿拉丁时时彩论坛
重庆时时彩怎么看冷号 时时彩平台靠什么赚钱 时时彩大小走势图 时时彩挂机软件下载 时时彩现场直播
重庆时时彩平台排名 时时彩登陆网址 abc娱乐平台送彩金吗 518时时彩导航网 重庆时时彩组三秘籍
十一选五缩水神器 炸金花的老千手法教学 黑龙江时时彩期号 陕西十一选五统计 香港马会白小姐
广西快3遗漏值统计表 快乐双彩玩法 赌博默示录下载 幸运飞艇开奖视频直播 天津11选5软件
深圳风采开奖结果今天 我的读书故事作文 赛车pk10计划 北京快3时间段 天津11选5预测分析
1分钟极速时时彩走势图 体育彩票36选7开奖结果 体彩试机号 内蒙古快3和值振幅 重庆幸运农场开奖时间