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