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

PHP DOM 操作 XML 入門:從樹結構理解到讀取實戰

     編輯:PHP 相關知識

DOM(Document Object Model)將 XML 文檔視為一棵節點樹,每個元素、屬性、文本都是節點。PHP 內建 DOMDocument 類提供了標準的 DOM API,支援對 XML 進行增刪改查(CRUD)。本文以 class.xml 為例,帶你從樹結構認知走到代碼實戰。

範例 XML:class.xml

<?xml version="1.0" encoding="utf-8"?>
<class>
  <student info="美女">
    <name>小喬</name>
    <sex>女</sex>
    <age>20</age>
  </student>
  <student>
    <name>周瑜</name>
    <sex>男</sex>
    <age>25</age>
  </student>
</class>

DOM 樹結構圖

核心物件關係

  • DOMDocument:整個文檔,也是根節點容器
  • DOMElement:元素節點(如 <student>),擁有屬性與子節點
  • DOMNodeList:getElementsByTagName 返回的節點列表,可遍歷、按索引取值
  • DOMAttr:屬性節點(如 info="美女")
  • DOMText:文本節點(標籤內的文字)

讀取操作:三步走

<?php
// 1. 建立文檔物件並載入
$xmldoc = new DOMDocument();
$xmldoc->load("class.xml");  // 或 loadXML($string)

// 2. 定位目標節點
$students = $xmldoc->getElementsByTagName("student"); // DOMNodeList
echo "共有 {$students->length} 個學生<br>";

// 3. 取值
$stu1 = $students->item(0);                    // 第一個 student (DOMElement)
$nameNode = $stu1->getElementsByTagName("name")->item(0);
echo $nameNode->nodeValue;  // 輸出:小喬
?>

進階:跳過中間層直接定位

若確定結構唯一,可直接搜尋 name:

$names = $xmldoc->getElementsByTagName("name");
echo $names->item(0)->nodeValue; // 小喬
echo $names->item(1)->nodeValue; // 周瑜

注意:若同一 student 下有多個 name,直接搜尋會導致順序混淆,此時需配合 XPath(DOMXPath)精準定位。

關鍵避坑指南

  1. 編碼:load() 自動識別 XML 聲明編碼;若載入字串用 loadXML(),確保字串為 UTF-8,否則中文會亂碼。
  2. 空白節點:XML 縮進產生的換行/空格會被解析為 DOMText 節點,遍歷 childNodes 時需過濾 nodeType === XML_TEXT_NODE && trim($node->nodeValue) === ''。
  3. var_dump 調試:輸出節點物件查看 nodeType、nodeName、nodeValue、attributes,對照 官方手冊 選擇正確 API。

總結

DOM 解析將 XML 載入記憶體,適合中小型文檔(< 10MB)的隨機存取與修改。大文件建議改用 XMLReader(流式拉取)或 SimpleXML(更簡潔的物件映射)。掌握 DOMDocument、DOMElement、DOMNodeList 三大核心類的協作,即可輕鬆完成 XML 讀取任務。

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