SimpleXML 是 PHP 内置轻量级 XML 解析扩展,将 XML 元素映射为对象属性,支持 simplexml_load_file() 和 simplexml_load_string() 加载数据,需强制 (string) 转换输出,可处理命名空间与 XPath 查询,但不支持写入和超大文件。

SimpleXML 是 PHP 内置的轻量级 XML 处理扩展,适合读取结构清晰、格式规范的 XML 数据。它把 XML 元素自动转为对象属性,用起来像访问数组或对象一样直观,不用写一堆 DOM 节点遍历代码。
加载 XML 文件或字符串
用 simplexml_load_file() 直接读取本地 XML 文件,或用 simplexml_load_string() 解析 XML 字符串。两者都返回 SimpleXMLElement 对象,失败时返回 false,建议加判断:
-
简单读取文件:
$xml = simplexml_load_file('data.xml') ?: die('无法加载 XML'); -
从字符串解析(比如 API 返回内容):
$xml = simplexml_load_string($raw_xml) ?: throw new Exception('XML 格式错误'); -
启用错误报告(开发时推荐):加上
LIBXML_NOERROR | LIBXML_NOWARNING参数可抑制警告,再配合libxml_get_errors()查错。
访问元素和属性
XML 标签名变成对象属性,同名多个节点会自动转为数组。属性用 ->attributes() 方法获取,返回可遍历的对象:
- 读取子元素:
$xml->book->title(返回第一个 title 文本) - 遍历同级多个元素:
foreach ($xml->book as $book) { echo (string)$book->author; } - 读取属性:
(string)$book['id']或(string)$book->attributes()->id - 强制转字符串:所有元素值默认是 SimpleXMLElement 对象,输出前加
(string)类型转换,否则可能报 Notice 或输出空白。
处理命名空间 XML
带命名空间(如 )的 XML 需先调用 getNamespaces() 获取前缀映射,再用 children() 切换上下文:
立即学习“PHP免费学习笔记(深入)”;
- 获取命名空间:
$ns = $xml->getNamespaces(true); // 返回 ['dc' => 'http://...'] - 进入 dc 命名空间:
$dc = $xml->children($ns['dc']); - 读取命名空间内元素:
echo (string)$dc->creator;
常见问题与注意点
SimpleXML 不支持修改、不支持 XPath 1.0 全功能(但支持基础 XPath 查询),也不适合超大 XML 文件(内存占用高)。实际使用中注意:











