問題の原因は比較的単純で、ナビゲーション ページのデータを整理してデータベースに書き込む必要があります。より直感的な方法は、HTML ファイルを分析することです。一般的な方法は、PHP 正規表現を使用して照合することです。ただし、この方法では開発と保守が難しく、コードの可読性も非常に悪いです。
ナビゲーションページのデータはDOMツリーに規則的に配置されており、JSを使用した複数のループで簡単に操作できます。また、JSはブラウザに依存する必要があり、データベースの操作は困難です。実際、PHP には、DOM ツリー内のノードを追加、削除、変更、確認するための既製のクラス ライブラリがあります。ここでいくつかメモしておきます。
これには、DOMDocument と DOMXPath の 2 つのクラスが関係します。
実際、アイデアは比較的明確です。つまり、HTML ファイルを DOMDocument を通じて DOM ツリーのデータ構造に変換し、次に DOMXPath のインスタンスを使用して DOM ツリーを検索して、必要な特定のノードを取得します。その後、現在のノード Traverse のサブツリーを検索して、目的の結果を得ることができます。
最も簡単なデモを作成します
現在のディレクトリにこのようなナビゲーション HTML ファイル「./hao.html」があります
次に、すべての タグの中国語コンテンツを取得する必要があります。php コードは次のとおりです。次のように:
rreee
出力結果は次のとおりです:
注: DOMDocument のデフォルトのエンコード方式はラテン語であるため、UTF エンコードされた中国語を処理する場合はそれに従う必要があることに注意してください。
ですぐに
<?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 "\n";} ?>を他の位置に入力するか、単に と書くと認識されません