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

PHP 操作 XML 入門基礎:XML 宣告、根元素、標籤命名規範與空白處理

     編輯:PHP 相關知識

XML (eXtensible Markup Language) 是資料交換與配置儲存的標準格式。PHP 提供 DOM、SimpleXML、XMLReader 等多種解析方式。本文從 XML 文件結構基礎入手,詳細解析 XML 宣告、根元素、元素/標籤/節點概念、空白字元處理、標籤命名五大規範,為後續 PHP 操作 XML 打下堅實基礎。

標準 XML 文件範例

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<class>
  <student>
    <name>小喬</name>
    <sex>女</sex>
    <age>23</age>
  </student>
  <student>
    <name>周瑜</name>
    <sex>男</sex>
    <age>27</age>
  </student>
</class>

一、XML 宣告

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
屬性說明必要性
versionXML 版本,固定 "1.0"必填
encoding字元編碼:utf-8、gb2312、big5 等建議填
standaloneyes/no,是否獨立 (無外部 DTD 參考)選填,預設 no

規則:宣告必須在文件第一行第一列,前面不能有任何字元 (含 BOM、空白、換行)。

二、根元素

<class>...</class> 為根元素。每個 XML 文件有且僅能有一個根元素,所有其他元素必須巢狀包含在根元素內。

三、XML 元素/標籤/節點

  • 元素 = 標籤 = 節點:三個術語在 DOM 模型中指同一概念
  • 成對標籤:<name>小喬</name>
  • 空元素簡寫:<name /> 等同 <name></name> (無內容時)
  • 巢狀結構:元素可包含子元素,形成樹狀結構

四、標籤中的空格與換行

重要:XML 解析器會將標籤間的空格、換行、縮排視為原始文字節點保留。

<student>
  <name>小喬</name>  ← 前面有換行+兩空格,會被解析為文字節點
</student>

程式設計影響:

  • DOMDocument::load() 載入時會保留格式化空白
  • 使用 $node->childNodes 遍歷時會包含空白文字節點
  • 解決:載入前設定 $dom->preserveWhiteSpace = false; 或遍歷時過濾 nodeType === XML_TEXT_NODE && trim($node->nodeValue) === ''

五、XML 標籤命名五大規範

規則說明錯誤範例正確範例
1. 區分大小寫<Name> ≠ <name><NAME> vs <name>統一風格 (如小寫)
2. 不能以數字或底線開頭首字元必須為字母或中文<1student>, <_student><student>, <學生>
3. 不能以 xml/Xml/XML 開頭保留關鍵字<xmlData>, <XmlConfig><dataXml>, <configXml>
4. 不能包含空格標籤名不可含空白字元<student name><student_name>
5. 不能包含冒號冒號保留給命名空間使用<ns:student> (需宣告命名空間)<student>

PHP 載入 XML 時的編碼處理

$dom = new DOMDocument();
$dom->load("class.xml");  // 自動偵測 XML 宣告中的 encoding

// 若 XML 無宣告或編碼不符,可強制指定
$dom->loadXML($xmlString, LIBXML_NOERROR | LIBXML_NOWARNING);
// 或預先轉碼
$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'GBK');

總結

XML 文件結構嚴謹,宣告在首行、單一根元素、標籤命名規範、空白節點保留 是五大核心特徵。PHP 操作 XML 前必須理解這些基礎,特別是空白節點處理與編碼轉換,否則解析結果常出現「多出莫名文字節點」或「中文亂碼」問題。

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