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

PHP SimpleXML 完整指南:XML 轉物件、XPath 查詢與屬性存取

     編輯:PHP 相關知識

PHP SimpleXML 完整指南

SimpleXML 是 PHP 核心擴展(PHP 5.1+ 內建),提供極簡單的 API 將 XML 文檔轉為可遍歷的物件樹,支援屬性存取、XPath 查詢、命名空間處理,是處理 XML 的首選工具。

載入 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 入門
?>

XPath 強力查詢

<?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 查詢

注意事項

  • 記憶體:大型 XML 建議使用 XMLReader (SAX 流式解析),SimpleXML 會將整棵樹載入記憶體。
  • 編碼:XML 宣告編碼需與實際內容一致,否則可能產生亂碼。
  • CDATA:SimpleXML 會自動處理 CDATA 區塊,直接存取即可。
  • 轉陣列:json_decode(json_encode($xml), true) 可快速轉為純陣列,但會丟失屬性與命名空間資訊。

SimpleXML 以直觀的物件導向 API 大幅降低 XML 處理門檻,配合 XPath 足以應對絕大多數業務場景。

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