用PHP代替JS玩轉DOM

2021-06-22 11:21:46 字數 1491 閱讀 2050

事情的起源比較簡單,我需要把乙個導航頁的資料整理好寫入資料庫。乙個比較直觀的方法是對html檔案進行分析,通用的方法是用php的正規表示式來匹配。但是這樣做開發和維護都很困難,**可讀性非常差。

導航頁的資料都是規則的排列在dom樹當中的,用js可以用幾個迴圈輕鬆的對其進行操作,而且js需要依賴瀏覽器,運算元據庫很困難。其實php就有現成的類庫對dom樹種的節點進行增刪改查操作,在此做一些筆記。

這裡涉及到2個類 domdocument 和 domxpath。

其實思路比較明確,就是通過domdocument將乙個html file轉換成dom樹的資料結構,再用domxpath的例項去搜尋這個dom樹,拿到想要特定節點,接下來就可以對當前節點的子樹進行遍歷,得到想要的結果。

寫乙個最簡單的demo

在當前目錄下有乙個這樣乙個導航的html檔案 "./hao.html"

現在需要得到所有標籤的中文內容,php**如下:

<?php 

//將html/xml檔案轉換成dom樹

$dom = new domdocument();

$dom->loadhtmlfile("hao.html");

//得到所有class為fix的dl標籤

// example 1: for everything with an id

//$elements = $xpath->query("//*[@id]");

// example 2: for node data in a selected id

//$elements = $xpath->query("/html/body/div[@id='yourtagidhere']");

// example 3: same as above with wildcard

//$elements = $xpath->query("*/div[@id='yourtagidhere']");

$xpath = new domxpath($dom);

$dls = $xpath->query('//dl[@class="fix"]');

foreach ($dls as $dl)

echo "\n";

}

?>

輸出結果如下:

注意:值得注意的一點是domdocument的預設編碼方式是latin,所以在處理utf編碼的中文的時候,需要在後面緊跟著填入

在其他位置,或者是只寫上都是不識別的哦

用「類」來代替「遞迴方法」,用php舉例。

author 大齡青年 問題 乙個樓梯有n個台階,每次上乙個或兩個台階,共有多少種上法,每種走法的步驟是什麼樣的?這個簡單問題,我們通常的方法是寫乙個遞迴呼叫,簡單明瞭。但是,這裡通過類的疊加來實現,雖然本身沒有太大的意義,但是這種設計的用途還是滿多的,可以自己考慮考慮。乙個樓梯有n個台階,每次上乙...

用CSS3來代替JS實現互動

css3和js 對於css了解的同學都知道,css的實現是最底層的,在實現方式和效能上都不是,js這種提供介面的指令碼可比的 從css3的動畫和js動畫對比角度來看兩者,會更清晰 而且隨著前端框架的使用,頁面動畫會越來越多的應用css3 css3的其他用法 除了動畫的代替,還有就是對於各種互動的實現...

php部分被棄用方法的代替方法

call user method 使用 call user func 替代 call user method array 使用 call user func array 替代 define syslog variables dl ereg 使用 preg match 替代 ereg replace ...