<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            8.7. 給屬性值加引號

            comp.lang.python 上的一個常見問題是 “我有一些 HTML 文檔,屬性值沒有用引號括起來,并且我想將它們全部括起來,我怎么才能實現它呢?[7] (一般這種事情的出現是由于一個項目經理加入到一個大的項目中來,而他又抱著 HTML 是一種標記語言的教條,要求所有的頁面必須能夠通過 HTML 校驗器的驗證。而屬性值沒有被引號括起來是一種常見的對 HTML 規范的違反。) 不管什么原因,未括起來的屬性值通過將 HTML 送進 BaseHTMLProcessor 可以容易地修復。

            BaseHTMLProcessor 消費 (consume) HTML (因為它是從 SGMLParser 派生來的) 并生成等價的 HTML。但是這個 HTML 輸出與輸入的并不一樣。標記和屬性名最終會轉化為小寫字母,即使它們可能以大寫字母開始或是大小寫的混合形式。屬性值將被雙引號引起來,即使它們原來可能是用單引號括起來的或根本沒有括起來。這就是最后我們可以受益的邊際效應。

            例 8.16. 給屬性值加引號

            >>> htmlSource = """        1
            ...     <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) 2
            >>> print parser.output()   3
            <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>
            1 請注意,在 <a> 標記中的 href 屬性值沒有被適當地括起來 (還要注意,除了文檔字符串之外,我們還將三重引號用到了 doc string 之外的其它地方,并且是不會少于直接在 IDE 中的使用。它們非常有用。)
            2 裝填分析器。
            3 使用定義在 BaseHTMLProcessor 中的 output 函數,我們得到單個字符串的輸出,并且屬性值被完全括起來了。讓我們想一下這里實際上發生了多少事:SGMLParser 分析整個 HTML 文檔,將其分解為一片片的標記、引用、數據等等。BaseHTMLProcessor 使用這些元素來重新構造 HTML 的片段 (如果您想查看的話它們仍然保存在 parser.pieces 中) 。最后,我們調用 parser.output,它將所有的 HTML 片段連接成一個字符串。

            Footnotes

            [7] 好吧,其實并不是那么普通的一個問題。在那不都是問 “我應該用何種編輯器來寫 Python 代碼?” (回答:Emacs) 或 “PythonPerl 是好還是壞?” (回答:“PerlPython 差,因為人們想讓它差的。” ――Larry Wall,1998 年 10 月 14 日) 但是關于 HTML 處理的問題,或者這種提法或者另一種提法,大約一個月就要出現一次,在這些問題之中,這個問題是最常見的一個。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线