คลาส DOMDocument และ DOMXPath ของ PHP ช่วยให้สามารถแยกวิเคราะห์และดึงข้อมูลจาก HTML/XML ได้อย่างมีประสิทธิภาพ
ตัวอย่าง: ดึงข้อความจาก div ที่ซ้อนกัน
<?php
$html = <<<HTML
<div class="main">
<div class="text">
This is text 1
</div>
</div>
<div class="main">
<div class="text">
This is text 2
</div>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
// ค้นหา div class="text" ที่อยู่ภายใน div class="main"
$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
var_dump(trim($tag->nodeValue));
}
?>
ผลลัพธ์
string 'This is text 1' (length=14) string 'This is text 2' (length=14)
คำอธิบาย XPath Query
//div[@class="main"]- ค้นหา div ทุกตัวที่มี class="main" ในทุกระดับ/div[@class="text"]- จากผลลัพธ์ข้างต้น ค้นหา div ลูกที่มี class="text"
เคล็ดลับการใช้งาน
- ใช้
libxml_use_internal_errors(true)ก่อนloadHTML()เพื่อป้องกัน Warning จาก HTML ที่ไม่สมบูรณ์ - ใช้
$dom->loadHTML('<?xml encoding="UTF-8"?>' . $html)เพื่อรองรับภาษาไทย/Unicode - ใช้
DOMXPathสำหรับ Query ที่ซับซ้อน แทนการวนลูปหาเอง