<?xml version="1.0" encoding="UTF-8"?>
<humans>
<person id="1">
<name>張映</name>
<sex>男</sex>
<age>28</age>
</person>
<person id="2">
<name>Tank</name>
<sex>男</sex>
<age>28</age>
</person>
</humans>
$dom = new DOMDocument();
$dom->load('person.xml'); // 或 loadXML($string)
$persons = $dom->getElementsByTagName('person');
foreach ($persons as $person) {
$name = $person->getElementsByTagName('name')->item(0)->textContent;
$sex = $person->getElementsByTagName('sex')->item(0)->textContent;
$age = $person->getElementsByTagName('age')->item(0)->textContent;
$id = $person->getAttribute('id');
echo "$id: $name - $sex - $age\n";
}
// 輸出:
// 1: 張映 - 男 - 28
// 2: Tank - 男 - 28
$xml = simplexml_load_file('person.xml'); // 或 simplexml_load_string()
foreach ($xml->person as $p) {
echo "{$p['id']}: {$p->name} - {$p->sex} - {$p->age}\n";
}
// 訪問屬性:$p['id'] 或 $p->attributes()->id
// 訪問同名子節點:$p->name[0], $p->name[1]...
$reader = new XMLReader();
$reader->open('person.xml');
while ($reader->read()) {
if ($reader->nodeType === XMLReader::ELEMENT && $reader->localName === 'person') {
// 讀取整個 子樹為 SimpleXML 對象
$person = simplexml_import_dom($reader->expand());
echo "{$person['id']}: {$person->name} - {$person->sex} - {$person->age}\n";
}
}
$reader->close();
$content = file_get_contents('person.xml');
preg_match_all('/<person id="(\d+)">\s*<name>(.*?)<\/name>\s*<sex>(.*?)<\/sex>\s*<age>(.*?)<\/age>\s*<\/person>/s', $content, $m);
foreach ($m[1] as $i => $id) {
echo "$id: {$m[2][$i]} - {$m[3][$i]} - {$m[4][$i]}\n";
}
| 方法 | 內存佔用 | 速度 | 功能豐富度 | 推薦場景 |
|---|---|---|---|---|
| DOMDocument | 高 | 中 | 最高 | 需修改 XML、Schema 驗證、XPath 複雜查詢、中小文件 |
| SimpleXML | 高 | 快 | 中 | 純讀取、結構固定、中小文件、快速開發 |
| XMLReader | 極低 | 中 | 中 | 大文件(>100MB)、流式處理、內存受限環境 |
| 正則 | 低 | 快 | 極低 | 一次性臨時腳本、格式絕對固定 |
$xml = simplexml_load_file('ns.xml');
$xml->registerXPathNamespace('ns', 'https://example.com/ns');
$items = $xml->xpath('//ns:item');
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($htmlString); // 不報錯
libxml_clear_errors();
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('humans');
$dom->appendChild($root);
$person = $dom->createElement('person');
$person->setAttribute('id', '3');
$name = $dom->createElement('name', 'New User');
$person->appendChild($name);
$root->appendChild($person);
echo $dom->saveXML();
日常開發首選 **SimpleXML**;需寫入/驗證/複雜查詢用 **DOMDocument**;處理大文件必用 **XMLReader**;**杜絕正則解析 XML**。