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

PHP DOMDocument 解析 XML 完全指南:從載入到 XPath 風格節點遍歷

     編輯:PHP 相關知識

範例 XML 資料 (me.xml)

<?xml version="1.0" encoding="utf-8"?>
<phplamp>
  <post>
    <title id="1">PHP XML處理介紹一</title>
    <details>詳細內容一</details>
  </post>
  <post>
    <title id="2">PHP XML處理介紹二</title>
    <details>詳細內容二</details>
  </post>
  <post>
    <title id="3">PHP XML處理介紹三</title>
    <details>詳細內容三</details>
  </post>
</phplamp>

DOMDocument 核心解析流程

<?php
// 1. 建立 DOMDocument 物件
$xml = new DOMDocument();

// 2. 載入 XML 檔案
$xml->load("me.xml");

// 3. 取得所有 <post> 節點
$postDom = $xml->getElementsByTagName("post");

// 4. 遍歷每個 post
foreach ($postDom as $post) {
    // 取得 title 節點
    $title = $post->getElementsByTagName("title");
    $titleNode = $title->item(0);

    // 取得屬性 id:先取屬性列表,再取第一個屬性的值
    $id = $titleNode->attributes->item(0)->nodeValue;

    // 取得節點文字內容
    $titleText = $titleNode->nodeValue;
    $details = $post->getElementsByTagName("details")->item(0)->nodeValue;

    echo "Id: $id<br/>";
    echo "Title: $titleText<br/>";
    echo "Details: $details<br/><br/>";
}
?>

關鍵 API 對照表

需求方法/屬性說明
載入檔案load()從檔案載入 XML
載入字串loadXML()從字串載入 XML
依標籤名取節點列表getElementsByTagName()回傳 DOMNodeList
取列表第 N 個節點item(index)索引從 0 開始
取節點文字內容nodeValue包含子節點文字
取屬性值attributes->item(0)->nodeValue屬性亦為節點
取屬性名attributes->item(0)->nodeName
取節點類型nodeType1=Element, 3=Text 等

進階:搭配 DOMXPath 更靈活查詢

DOMDocument 內建 DOMXPath 類,支援 XPath 1.0 語法,適合複雜結構查詢:

$xpath = new DOMXPath($xml);
$posts = $xpath->query("//post");
foreach ($posts as $post) {
    $id = $xpath->evaluate("string(title/@id)", $post);
    $title = $xpath->evaluate("string(title)", $post);
    $details = $xpath->evaluate("string(details)", $post);
    // ...
}

總結

DOMDocument 以樹狀結構完整載入 XML 至記憶體,適合中小型文件、需隨機存取、修改文件結構的場景。大型文件建議改用 XMLReader(流式讀取)或 SimpleXML(簡易 API)。

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