JSの代わりにPHPでDOMを遊ぶ考え方とサンプルコード

1463 ワード

事の起源は比較的簡単で、ナビゲーションページのデータを整理してデータベースに書き込む必要があります.比較的直感的な方法はhtmlファイルを分析することであり、phpの正規表現で一致するのが一般的な方法である.しかし,このように開発やメンテナンスが困難であり,コードの可読性が非常に悪い.
ナビゲーションページのデータはすべてDOMツリーに規則的に並べられており、JSではいくつかのループで簡単に操作できます.また、JSはブラウザに依存する必要があり、データベースの操作が困難です.実はPHPには既存のクラスライブラリがあり、DOM樹種のノードを追加削除して調べる操作があり、ここでいくつかのメモを取っています.
ここでは2つのクラスDOMDocumentとDOMXPathについて述べる.
実は考え方が明確で、DOMDocumentによって1つのhtml fileをDOMツリーのデータ構造に変換し、DOMXPathの例でこのDOMツリーを検索し、特定のノードを取得し、次に現在のノードのサブツリーを遍歴し、所望の結果を得ることができる.
現在のディレクトリの下に、htmlファイル「./hao.html」というナビゲーションがあります.
ラベルの中国語の内容、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) { $spans = $dl->childNodes; foreach ($spans as $span) { echo trim($span->textContent)."\t"; } echo ""; } ?> 出力結果は次のとおりです。 注意:注意すべき点はDOMDocumentのデフォルト符号化方式がLatinであるため、utf符号化の中国語を処理する際には、後ろに記入する必要がある 他の場所でも、書くだけでは認識されませんよをすべて入手する必要があります