PHP SimpleXML 擴充套件將 XML 文件轉為物件,支援屬性存取、陣列迭代、XPath 查詢,是處理 XML 資料的利器。本文完整整理核心函數、常用操作與實戰範例。
核心載入函數
| 函數 | 用途 |
| simplexml_load_file() | 從檔案載入 XML 回傳 SimpleXMLElement 物件 |
| simplexml_load_string() | 從字串載入 XML |
| simplexml_import_dom() | 從 DOMDocument 節點轉換 |
實戰範例:解析單字資料 XML
<?php
// 載入 XML 檔案
$lib = simplexml_load_file("cet4.xml");
// 取得所有 item 節點(轉為陣列迭代)
$items = $lib->item;
$count = count($items);
for ($i=0; $i<$count; $i++) {
$word = $items[$i];
echo $word->word . '-----' . $word->trans . '-----' . $word->phonetic . '<br/>';
}
// XPath 查詢:取得所有 word 節點
$words = $lib->xpath("//word");
// 取得屬性值
echo $words[0]['add'] . '<br/>'; // 屬性 add
echo $items[0]['pp']; // 屬性 pp
?>
完整函數參考表
| 函數/方法 | 描述 | PHP 版本 |
| __construct() | 建立新 SimpleXMLElement 物件 | 5 |
| addAttribute() | 新增屬性 | 5 |
| addChild() | 新增子元素 | 5 |
| asXML() | 輸出 XML 字串 | 5 |
| attributes() | 取得元素屬性 | 5 |
| children() | 取得子節點 | 5 |
| getDocNamespaces() | 取得文件命名空間 | 5 |
| getName() | 取得元素名稱 | 5 |
| getNamespaces() | 取得資料命名空間 | 5 |
| registerXPathNamespace() | 註冊 XPath 命名空間 | 5 |
| xpath() | 執行 XPath 查詢 | 5 |
常見操作模式
<?php
$xml = simplexml_load_string($xmlString);
// 1. 存取子元素(屬性式)
echo $xml->title;
// 2. 存取屬性
echo $xml->book['id'];
// 3. 迴圈子元素
foreach ($xml->book as $book) {
echo $book->title;
}
// 4. XPath 查詢
$results = $xml->xpath("//book[@category='tech']");
// 5. 新增元素與屬性
$xml->addChild('book', 'New Title')->addAttribute('id', '999');
// 6. 輸出 XML
header('Content-Type: text/xml');
echo $xml->asXML();
?>
注意事項
- SimpleXML 物件無法直接
var_dump 觀察完整結構,建議用 $xml->asXML() 輸出字串檢視
- 大型 XML 檔案記憶體佔用高,考慮使用
XMLReader 流式解析
- 命名空間處理需搭配
registerXPathNamespace 或 children('ns', true)