首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 操作 DOM 解析 HTML:以 DOMDocument 與 DOMXPath 替代正則的實戰範例

     編輯:PHP 相關知識

需要從導航頁 HTML 結構化提取資料寫入資料庫?正則表達式雖能匹配,但維護成本高、可讀性差。PHP 內建 DOMDocument 與 DOMXPath 提供標準化 DOM 樹操作,讓伺服器端像瀏覽器端 JS 一樣優雅處理 HTML。

核心類別與工作流

  • DOMDocument:將 HTML/XML 字串或檔案解析為 DOM 樹結構。
  • DOMXPath:支援 XPath 1.0 查詢語法,精準定位節點。
  • 流程:載入檔案 → 建立 XPath 物件 → 查詢節點 → 遍歷子樹提取資料。

實戰程式碼:抓取 class="fix" 的 <dl> 內文字內容

<?php
// 1. 載入 HTML 檔案
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 抑制 HTML5 非標準標籤警告
$dom->loadHTMLFile('./hao.html');
libxml_clear_errors();

// 2. 建立 XPath 查詢器
$xpath = new DOMXPath($dom);

// 3. 精準定位目標節點
$dls = $xpath->query('//dl[@class="fix"]');

// 4. 遍歷輸出文字內容
foreach ($dls as $dl) {
    foreach ($dl->childNodes as $span) {
        echo trim($span->textContent) . "\t";
    }
    echo "\n";
}
?>

關鍵避坑指南:UTF-8 中文編碼處理

DOMDocument 預設編碼為 Latin-1,直接載入 UTF-8 含中文頁面會導致亂碼。解決方案:

<?php
$html = file_get_contents('./hao.html');
// 強制宣告 UTF-8,配合 meta 標籤或 HTTP header
$dom->loadHTML('<meta charset="UTF-8">' . $html);
// 或使用 mb_convert_encoding 預處理
?>

⚠️ 必須在 loadHTML() 之前完成編碼宣告,事後補充無效。

XPath 常用查詢模式速查

需求XPath 表達式
所有擁有 id 屬性的元素//*[@id]
特定 id 直屬下的節點資料/html/body/div[@id='target']
任意層級下符合 id 的 div//div[@id='target']
class 包含特定值(需配合 contains)//*[contains(@class, 'fix')]

掌握 DOMDocument + DOMXPath 組合,讓 PHP 也能輕鬆玩轉 DOM 樹,告別脆弱的正則解析時代。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved