SimpleXML 是 PHP 核心擴展(PHP 5.1+ 內建),提供極簡單的 API 將 XML 文檔轉為可遍歷的物件樹,支援屬性存取、XPath 查詢、命名空間處理,是處理 XML 的首選工具。
<?php
// 從檔案載入
$xml = simplexml_load_file('books.xml');
// 從字串載入
$xml = simplexml_load_string($xmlString);
// 從 DOMDocument 匯入
$dom = new DOMDocument();
$dom->loadXML($xmlString);
$xml = simplexml_import_dom($dom);
?>
假設 XML 結構:
<library>
<book id="1">
<title>PHP 入門</title>
<author>張三</author>
</book>
<book id="2">
<title>進階 PHP</title>
<author>李四</author>
</book>
</library>
<?php
$lib = simplexml_load_file('library.xml');
// 直接以屬性存取子元素
foreach ($lib->book as $book) {
echo "ID: {$book['id']}\n"; // 存取屬性
echo "Title: {$book->title}\n"; // 存取子元素
echo "Author: {$book->author}\n";
}
// 亦可轉陣列索引
$books = $lib->book;
echo $books[0]->title; // PHP 入門
?>
<?php
// 取得所有 title 元素
$titles = $lib->xpath('//title');
foreach ($titles as $t) { echo $t . "\n"; }
// 條件查詢:id=2 的書名
$book2 = $lib->xpath('//book[@id="2"]/title');
echo $book2[0]; // 進階 PHP
// 取得所有 id 屬性值
$ids = $lib->xpath('//book/@id');
?>
<?php
$xml = simplexml_load_string('
Value</ns:item>
');
// 註冊命名空間前綴
$xml->registerXPathNamespace('ex', 'https://example.com/ns');
$items = $xml->xpath('//ex:item');
echo $items[0]; // Value
// 獲取文檔所有命名空間
print_r($xml->getDocNamespaces(true));
?>
| 方法 | 用途 |
|---|---|
__construct() | 建立 SimpleXMLElement 物件(通常不直接呼叫) |
addChild() | 新增子元素 |
addAttribute() | 新增屬性 |
asXML() | 輸出 XML 字串(可存檔) |
attributes() | 取得所有屬性陣列 |
children() | 取得子元素(可指定命名空間) |
getName() | 取得元素標籤名 |
xpath() | 執行 XPath 查詢 |
XMLReader (SAX 流式解析),SimpleXML 會將整棵樹載入記憶體。json_decode(json_encode($xml), true) 可快速轉為純陣列,但會丟失屬性與命名空間資訊。SimpleXML 以直觀的物件導向 API 大幅降低 XML 處理門檻,配合 XPath 足以應對絕大多數業務場景。