PHP5 引入 DOMDocument 類,提供強大、標準的 XML 操作 API。本文通過完整示例演示加載、讀取、XPath 查詢、新增、刪除、修改節點,並附帶測試用 test.xml。
<?php
$dom = new DomDocument();
$dom->load("test.xml");
// 1. 獲取所有 title 元素
$titles = $dom->getElementsByTagName("title");
foreach ($titles as $node) {
echo $node->textContent . "<br/>";
}
// 2. XPath 查詢(更強大)
$xpath = new DOMXPath($dom);
$titles = $xpath->query("/rss/channel/item/title");
foreach ($titles as $node) {
echo $node->textContent . "<br/>";
}
// 進階 XPath 示例:
// /rss/channel/item[position()=1]/title 第一個 item 的 title
// /rss/channel/item/title[@id='23'] id=23 的 title
// 3. 新增節點
$item = $dom->createElement("item");
$title = $dom->createElement("title");
$title->appendChild($dom->createTextNode("title text"));
$item->appendChild($title);
$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item);
// 4. 刪除節點(兩種方式)
// $dom->documentElement->removeChild($dom->documentElement->getElementsByTagName("channel")->item(0));
// $dom->documentElement->removeChild($xpath->query("/rss/channel")->item(0));
// 5. 修改節點:替換第一個 title
$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
$newTitle = $dom->createElement("title");
$newTitle->appendChild(new DOMText("This's the new title text!!!"));
$firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
// 修改屬性示例
// $firstTitle->setAttribute("orderby", "4");
$dom->save("newfile.xml");
echo "<hr/><a href='newfile.xml'>查看生成文件</a>";
?>
<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title>javascript</title>
<item><title orderby="1">out put excel used javascript</title></item>
<item><title orderby="2">out put word used javascript</title></item>
<item><title orderby="3">xmlhttp</title></item>
</channel>
</rss>
DOMDocument::load() 加載文件,save() 落盤getElementsByTagName() 簡單遍歷;DOMXPath::query() 支持複雜路徑、條件createElement() + createTextNode() + appendChild()DOMDocument 亦可解析 HTML(loadHTMLFile()),抓取網頁標題等信息。