| 導航:起始頁 > Dive Into Python > HTML 處理 > 給屬性值加引號 | << >> | ||||
深入 Python :Dive Into Python 中文版Python 從新手到專家 [Dip_5.4b_CPyUG_Release] |
|||||
在 comp.lang.python 上的一個常見問題是 “我有一些 HTML 文檔,屬性值沒有用引號括起來,并且我想將它們全部括起來,我怎么才能實現它呢?” [7] (一般這種事情的出現是由于一個項目經理加入到一個大的項目中來,而他又抱著 HTML 是一種標記語言的教條,要求所有的頁面必須能夠通過 HTML 校驗器的驗證。而屬性值沒有被引號括起來是一種常見的對 HTML 規范的違反。) 不管什么原因,未括起來的屬性值通過將 HTML 送進 BaseHTMLProcessor 可以容易地修復。
BaseHTMLProcessor 消費 (consume) HTML (因為它是從 SGMLParser 派生來的) 并生成等價的 HTML。但是這個 HTML 輸出與輸入的并不一樣。標記和屬性名最終會轉化為小寫字母,即使它們可能以大寫字母開始或是大小寫的混合形式。屬性值將被雙引號引起來,即使它們原來可能是用單引號括起來的或根本沒有括起來。這就是最后我們可以受益的邊際效應。
>>> 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 片段連接成一個字符串。 |
[7] 好吧,其實并不是那么普通的一個問題。在那不都是問 “我應該用何種編輯器來寫 Python 代碼?” (回答:Emacs) 或 “Python 比 Perl 是好還是壞?” (回答:“Perl 比 Python 差,因為人們想讓它差的。” ――Larry Wall,1998 年 10 月 14 日) 但是關于 HTML 處理的問題,或者這種提法或者另一種提法,大約一個月就要出現一次,在這些問題之中,這個問題是最常見的一個。
<< 基于 dictionary 的字符串格式化 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
dialect.py 介紹 >> |