一直以來使用php解析html文檔樹都是一個難題。Simple HTML DOM parser 幫咱們很好地解決了使用 php html 解析 問題。能夠經過這個php類來解析html文檔,對其中的html元素進行操做 (PHP5+以上版本)。php
解析器不單單只是幫助咱們驗證html文檔;更能解析不符合W3C標準的html文檔。它使用了相似jQuery的元素選擇器,經過元素的id,class,tag等等來查找定位;同時還提供添加、刪除、修改文檔樹的功能。固然,這樣一款強大的html Dom解析器也不是盡善盡美;在使用的過程當中須要十分當心內存消耗的狀況。不過,不要擔憂;本文中,筆者在最後會爲各位介紹如何避免消耗過多的內存。html
上傳類文件之後,有三種方式調用這個類:正則表達式
從url中加載html文檔數組
從字符串中加載html文檔網絡
從文件中加載html文檔dom
?函數
1網站 2url 3spa 4 5 6 7 8 9 10 11 12 13 |
|
若是從字符串加載html文檔,須要先從網絡上下載。建議使用cURL來抓取html文檔並加載DOM中。
可使用find函數來查找html文檔中的元素。返回的結果是一個包含了對象的數組。咱們使用HTML DOM解析類中的函數來訪問這些對象,下面給出幾個示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
還可使用相似jQuery的選擇器來查找定位元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
解析器支持對子元素的查找
1 2 3 4 5 6 7 8 9 |
|
若是你以爲這樣用起來麻煩,使用內置函數能夠輕鬆定位元素的父元素、子元素與相鄰元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
使用簡單的正則表達式來操做屬性選擇器。
[attribute] – 選擇包含某屬性的html元素
[attribute=value] – 選擇全部指定值屬性的html元素
[attribute!=value]- 選擇全部非指定值屬性的html元素
[attribute^=value] -選擇全部指定值開頭屬性的html元素
[attribute$=value] 選擇全部指定值結尾屬性的html元素
[attribute*=value] -選擇全部包含指定值屬性的html元素
在DOM中元素屬性也是對象:
1 2 3 4 |
|
或者:
1 2 3 |
|
每一個對象都有4個基本對象屬性:
tag – 返回html標籤名
innertext – 返回innerHTML
outertext – 返回outerHTML
plaintext – 返回html標籤中的文本
編輯元素屬性的用法和調用它們是相似的:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
解析器中沒有專門的方法來添加、刪除元素,不過能夠變通一下使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
保存修改後的html DOM文檔也很是簡單:
1 2 3 4 5 6 |
|
在本文的開篇中,筆者就提到了Simple HTML DOM解析器消耗內存過多的問題。若是php腳本佔用內存太多,會致使網站中止響應等一系列嚴重的問題。解決的方法也很簡單,在解析器加載html文檔並使用完成後,記得清理掉這個對象就能夠了。固然,也不要把問題看得太嚴重了。若是隻是加載了二、3個文檔,清理或不清理是沒有多大區別的。當你加載了5個10個甚至更多的文檔的時候,用完一個就清理一下內存絕對是對本身負責啦^_^
1 2 3 |
|