首頁 > web前端 > html教學 > 詳解一個完美的HTML解析引擎(Jumony)

詳解一個完美的HTML解析引擎(Jumony)

零下一度
發布: 2017-05-04 14:57:37
原創
7373 人瀏覽過

也許很多人會認為,目前的HTML解析器已經足夠了,甚至於簡單的正規則,也已經可以滿足操縱HTML文件的需求。是的,對於網路上絕大多數的 HTML文檔,事實上都大部分都滿足了XHTML的規​​範,對於它們的解析,並不需要多麼強大的解析器。但是強大的解析器是一回事,而完美的解析器又是另一回事。

Jumony Core首先提供了一個近乎完美的HTML解析引擎,其解析結果無限逼近瀏覽器的解析結果。不論是無結束標籤的元素,可選結束標籤的元素,或標記屬性,或CSS選擇器和样式,一切合法的,不合法的HTML文檔,瀏覽器解析成啥樣,Jumony就解析成啥樣。也就是說,Jumony解析的結果,與瀏覽器解析的結果別無二致,讓你可以再也不用關心HTML文檔是否可以被識別,瀏覽器能看,Jumony就能解。

完美且強大隻有一步之遙,但是完美的解析器可以讓你永遠不用關心HTML來源文件。

以下是Jumony解析器所支援的特性不完全列表

特性 例子
孤立的<解析为文本< a应当解析为< a
孤立的>解析为文本 >应当解析为>
标记属性(没有值的属性)
元素丢失结束标签

测试链接

可选结束标签元素
"body", "colgroup", "dd", "dt", "head", "html", "li", "option", "p", "tbody", "td", "tfoot", "th", "thead", "tr"

abc

123

无结束标签元素
"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta" , "param", "wbr", "bgsound", "spacer", "keygen"
CData元素 #<script>if ( 1<a ) alert( "< p>" );</script>
#"script", "style", "textarea", "title" # 
預先格式化元素
    <span class="font5">前面有空格</span><span class="font6">
#屬性值使用單引號 ##< a href='#'>
屬性值使用雙引號
屬性值不使用引號#
屬性值遺失(但有等號)
屬性值前面有空格
解析HTML聲明 #
########################################################## ###


不僅僅是可以從文本中解析HTML,Jumony的API可以從互聯網上直接抓取文檔分析,並根據HTTP頭自動識別編碼:

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )
登入後複製
登入後複製

而目前僅次於Jumony的HTML解析開源專案HtmlAgilityPack早已停止了更新,這麼多年過去了,對於最基本的

元素的解析都還存在問題。

二、CSS樣式設定支援

只是完美解析HTML,並不能帶來多少好處,上面已經說過,事實上大部分的HTML文檔,都​​可以用二流的解析器甚至是簡單的正規表示式加以分析,那為什麼我們需要Jumony呢?

答案是一個HTML引擎不只是解析DOM結構這麼簡單。

考慮這樣的場景:我需要為一個元素的display樣式設定一個none值。在瀏覽器中,我們只需要簡單的 element.style.display = "none"可以滿足我們的要求。現在,透過解析器已經得到了我們所需的DOM,但設定樣式還需要進行字串的拼接麼?

不需要,Jumony支援CSS樣式解析,甚至部分CSS樣式縮寫規則也能識別,在Jumony中,給元素設定一個樣式和在瀏覽器中一樣簡單:

element.Style( "display", "none" )
登入後複製

我們再來看這樣的範例:

,如果我們對這個元素設定padding-left: 0px會怎麼樣?

在Jumony中,結果會是:

<p style="padding-left: 0px; padding-right: 5px; padding-top:5px; padding-bottom: 5px"></p>
登入後複製

看,padding屬性被神奇的自動展開了。

三、CSS 3選擇器支援

CSS選擇器是HTML世界通行的查詢語言,其簡潔有力且被眾多瀏覽器支援。 Jumony也支援幾乎完整的CSS3選擇器(除去運行時偽類及偽物件)。借助選擇器,我們可以輕鬆的在HTML中找到我們感興趣的物件。例如抓取部落格園首頁所有文章標題:

new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" )
登入後複製
登入後複製

抓取,分析,選擇,一氣呵成,只需要簡單的程式碼,我們就能在控制台輸出我們抓取到的資料:

 foreach( var title = new JumonyParser().LoadDocument( "www.php.cn/" ).Find( ".post_item a.titlelnk" ) )
  Console.WriteLine( title.InnerText() );
登入後複製

Jumony支援的CSS3選擇器清單:

##p+a選擇相鄰元素p~a選擇後繼元素[attr]屬性存在選擇#[attr=value]屬性值精確匹配##[ attr~=value]#[attr^=value][attr*=value][attr$=value][attr!=value]##: not#:only-child:only-of-type
選擇器 描述
##* 選擇所有元素
#p a 選擇子代元素
p>a #選擇子級元素
屬性值近似匹配
屬性值開頭符合
屬性值包含匹配
屬性值結尾符合
屬性值否定符合
否定偽類別
唯一子元素偽類別
##唯一型別偽類別 :empty
空元素偽類別 : nth-child
結構化偽類別 #:nth-last-child
#結構化偽類別 :nth-of-type
結構化偽類別
:nth-last-of-type #結構化偽類別
:first-child #結構化偽類別
:last-child 結構化偽類別
#:first-of-type 結構化偽類別
:last-of-type 結構化偽類別


#四、強大的可擴展性

在Jumony Core 3,為使用者提供了最大的可擴展性,你可以自訂HTML規範,實作自己的解析器,將其他DOM模型嫁接到Jumony API上,發明自己的CSS選擇器偽類,甚至於自己換一套API,例如jQuery風格的。

Jumony Core擁有許多的衍生項目,例如爬取網站,提供jQuery風格的API、進行網站開發、製作MHT檔案、為HAP的解析結果增加CSS選擇器支援等等,這些項目都得歸功於Jumony Core強大的可擴充性,從而發揮強大的功能。

【相關推薦】

1. 免費html線上影片教學

2. html開發手冊

3. php.cn原始html5影片教學

以上是詳解一個完美的HTML解析引擎(Jumony)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板