也許很多人會認為,目前的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早已停止了更新,這麼多年過去了,對於最基本的