核心代碼
<?php
$content = <<
HTTP
80
/index.html
5000
3000
2
3
XML;
$xml = new SimpleXMLElement($content);
// 1. 獲取單一元素值
$ping_protocol = $xml->global_setting->ping_protocol;
echo "ping_protocol: $ping_protocol\n";
// 2. 遍歷屬性
foreach ($xml->instances->instance as $instance) {
echo "IP: {$instance['ip']}\n";
}
// 3. 關鍵提示
// - var_dump() 可能無法直觀輸出 SimpleXMLElement 結構
// - 推薦使用 echo (string)$element 或 ->asXML()
// - XML 宣告可省略,SimpleXMLElement 可直接解析字符串
// - 中文內容需確保編碼為 UTF-8
?>
關鍵 API 速查
| 操作 | 代碼 | 說明 |
| 獲取子元素 | $xml->child | 屬性訪問轉換為對象屬性 |
| 獲取屬性 | $xml['attr'] | 數組語法訪問 XML 屬性 |
| 遍歷同名元素 | foreach($xml->items->item as $item) | 自動迭代 |
| 獲取文本內容 | (string)$xml->element | 強制轉字符串 |
| XPath 查詢 | $xml->xpath('//item[@id=1]') | 複雜查詢 |
| 轉回 XML 字符串 | $xml->asXML() | 含宣告頭 |
常見坑點與建議
- 命名空間: XML 含命名空間時需
$xml->registerXPathNamespace('ns', 'uri') 後再 XPath
- 大小寫敏感: XML 標籤大小寫敏感,
$xml->Test ≠ $xml->test
- 編碼: 輸入字符串必須為 UTF-8,否則解析報錯或亂碼
- 錯誤處理:
libxml_use_internal_errors(true) 捕獲解析錯誤,避免 Warning 干擾輸出
- 大文件: 超大 XML 建議使用
XMLReader 流式解析,避免記憶體耗盡
相關專題