首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP SimpleXML 完整指南:輕鬆讀寫、查詢與修改 XML 文件

     編輯:PHP 綜合知識

SimpleXML 簡介

PHP 5 內建擴充,將 XML 轉為物件樹,支援屬性式存取與 XPath 查詢,極適合處理 RSS、配置檔、API 回應等結構化 XML。

基本用法:RSS Feed 解析範例

範例 XML

<?xml version="1.0" encoding="UTF-8"?>
<rss version="0.92">
<channel>
  <title>Mokka mit Schlag</title>
  <link>https://www.elharo.com/blog</link>
  <language>en</language>
  <item>
    <title>Penn Station: Gone but not Forgotten</title>
    <description>...</description>
    <link>https://example.com/1</link>
  </item>
  <item>
    <title>Personal for Elliotte Harold</title>
    <description>...</description>
    <link>https://example.com/2</link>
  </item>
</channel>
</rss>

載入與遍歷

<?php
$xml = simplexml_load_file('feed.rss');
// 或字串載入
// $xml = simplexml_load_string($string);

echo "Feed 標題: {$xml->channel->title}\n";
foreach ($xml->channel->item as $item) {
    echo "- {$item->title} ({$item->link})\n";
}

XPath 查詢:精準定位節點

<?php
// 取得所有 item 標題
$titles = $xml->xpath('//item/title');
foreach ($titles as $title) {
    echo $title . "\n";
}

// 依屬性過濾(若有)
// $items = $xml->xpath('//item[@category="tech"]');

修改與建立 XML

修改現有節點

<?php
$xml->channel->title = '新標題';
$xml->channel->item[0]->title = '更新後的標題';
// 儲存
$xml->asXML('feed_updated.rss');

新增節點

<?php
$newItem = $xml->channel->addChild('item');
$newItem->addChild('title', '新文章');
$newItem->addChild('link', 'https://example.com/3');
$newItem->addChild('description', '內容摘要');
$xml->asXML('feed_new.rss');

從頭建立 XML

<?php
$xml = new SimpleXMLElement('<root/>');
$xml->addChild('user', 'John');
$xml->user->addAttribute('id', 123);
echo $xml->asXML();

命名空間處理

<?php
$xml = simplexml_load_file('atom.xml');
$ns = $xml->getNamespaces(true);
$entries = $xml->children($ns['atom'])->entry;
foreach ($entries as $entry) {
    echo $entry->title . "\n";
}

常見陷阱與技巧

  • 屬性存取:$xml->element['attr']
  • 多個同名子節點:自動轉為陣列 $xml->item[0]
  • CDATA 區段:SimpleXML 讀取時自動解碼,寫入需手動包裹
  • 編碼:確保 XML 宣告 encoding 與 PHP 內部編碼一致(UTF-8)
  • 錯誤處理:libxml_use_internal_errors(true) 捕獲解析錯誤

效能考量

SimpleXML 將整份 XML 載入記憶體,大檔案(>50MB)建議使用 XMLReader (SAX 流式解析) 或 DOMDocument 逐節點處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved