您好,登錄后才能下訂單哦!
這篇文章主要介紹了PHP中如何使用DOMDocument來處理HTML、XML文檔,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1、執行速度快。2、具有很好的開放性和可擴展性。3、PHP支持多種主流與非主流的數據庫。4、面向對象編程:PHP提供了類和對象。5、版本更新速度快。6、具有豐富的功能。7、可伸縮性。8、功能全面,包括圖形處理、編碼與解碼、壓縮文件處理、xml解析等。
// 解析 HTML $baidu = file_get_contents('https://www.baidu.com'); $doc = new DOMDocument(); @$doc->loadHTML($baidu); // 百度輸出框 $inputSearch = $doc->getElementById('kw'); var_dump($inputSearch); // object(DOMElement)#2 // .... echo $inputSearch->getAttribute('name'), PHP_EOL; // wd // 獲取所有圖片的鏈接 $allImageLinks = []; $imgs = $doc->getElementsByTagName('img'); foreach($imgs as $img){ $allImageLinks[] = $img->getAttribute('src'); } print_r($allImageLinks); // Array // ( // [0] => //www.baidu.com/img/baidu_jgylogo3.gif // [1] => //www.baidu.com/img/bd_logo.png // [2] => https://cache.yisu.com/upload/information/20210429/112/16981.gif // ) // 利用 parse_url 分析鏈接 foreach($allImageLinks as $link){ print_r(parse_url($link)); } // Array // ( // [host] => www.baidu.com // [path] => /img/baidu_jgylogo3.gif // ) // Array // ( // [host] => www.baidu.com // [path] => /img/bd_logo.png // ) // Array // ( // [scheme] => http // [host] => s1.bdstatic.com // [path] => /r/www/cache/static/global/img/gs_237f015b.gif // )
是不是感覺好清晰,好有面向對象的感覺。就像第一次使用 ORM庫 來進行數據庫操作一樣的感覺。我們一段一段來看。
$baidu = file_get_contents('https://www.baidu.com'); $doc = new DOMDocument(); @$doc->loadHTML($baidu);
首先是加載文檔內容,這個比較好理解,直接使用 loadHTML() 方法加載 HTML 內容。它還提供了其它的幾個方法,分別是:load() 從一個文件加載XML;loadXML() 從字符串加載XML;loadHTMLFile() 從文件加載HTML。
// 百度輸出框 $inputSearch = $doc->getElementById('kw'); var_dump($inputSearch); // object(DOMElement)#2 // .... echo $inputSearch->getAttribute('name'), PHP_EOL; // wd
首先是加載文檔內容,這個比較好理解,直接使用 loadHTML() 方法加載 HTML 內容。它還提供了其它的幾個方法,分別是:load() 從一個文件加載XML;loadXML() 從字符串加載XML;loadHTMLFile() 從文件加載HTML。
// 百度輸出框 $inputSearch = $doc->getElementById('kw'); var_dump($inputSearch); // object(DOMElement)#2 // .... echo $inputSearch->getAttribute('name'), PHP_EOL; // wd
接下來我們使用和前端 JS 一樣的 DOM 操作API來操作HTML里面的元素。這個例子中就是獲取百度的文本框,直接使用 getElementById() 方法獲得id為指定內容的 DOMElement 對象。然后就可以獲取它的值、屬性之類的內容了。
// 獲取所有圖片的鏈接 $allImageLinks = []; $imgs = $doc->getElementsByTagName('img'); foreach($imgs as $img){ $allImageLinks[] = $img->getAttribute('src'); } print_r($allImageLinks); // Array // ( // [0] => //www.baidu.com/img/baidu_jgylogo3.gif // [1] => //www.baidu.com/img/bd_logo.png // [2] => https://cache.yisu.com/upload/information/20210429/112/16981.gif // ) // 利用 parse_url 分析鏈接 foreach($allImageLinks as $link){ print_r(parse_url($link)); } // Array // ( // [host] => www.baidu.com // [path] => /img/baidu_jgylogo3.gif // ) // Array // ( // [host] => www.baidu.com // [path] => /img/bd_logo.png // ) // Array // ( // [scheme] => http // [host] => s1.bdstatic.com // [path] => /r/www/cache/static/global/img/gs_237f015b.gif // )
這一段例子則是獲取HTML文檔中所有的圖片鏈接。相比正則來說,是不是方便很多,而且代碼本身就是自解釋的,不用考慮正則的匹配失效的問題。配合另外一個PHP中自帶的 parse_url() 方法也能非常方便地對鏈接進行分析,提取自己想要的內容。
XML的解析和對HTML的解析也是類似的,都使用 DOMDocument 和 DOMElement 提供的這個方法接口就可以很方便的進行解析了。那么我們想要生成一個標準格式的XML呢?當然也非常的簡單,不需要再去拼接字符串了,使用這個類一樣的進行對象化的操作。
// 生成一個XML文檔 $xml = new DOMDocument('1.0', 'UTF-8'); $node1 = $xml->createElement('First', 'This is First Node.'); $node1->setAttribute('type', '1'); $node2 = $xml->createElement('Second'); $node2->setAttribute('type', '2'); $node2_child = $xml->createElement('Second-Child', 'This is Second Node Child.'); $node2->appendChild($node2_child); $xml->appendChild($node1); $xml->appendChild($node2); print $xml->saveXML(); /* <?xml version="1.0" encoding="UTF-8"?> <First type="1">This is First Node.</First> <Second type="2"><Second-Child>This is Second Node Child.</Second-Child></Second> */
其實只要有一點點的前端 JS 的基礎都不難看出這段代碼的含義。使用 createElement() 方法創造 DOMElement 對象,然后就可以為它添加屬性和內容。使用 appendChild() 方法就可以為當前的 DOMElement 或者 DOMDocument 添加下級節點。最后使用 saveXML() 就能夠生成標準的XML格式內容了。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP中如何使用DOMDocument來處理HTML、XML文檔”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。