在PHP开发中,XML作为一种通用的数据交换格式,常被用于接口数据传输、配置文件存储等场景,而SimpleXML是PHP内置的轻量级XML操作扩展,能够用简洁的面向对象语法快速处理XML数据,降低XML操作的复杂度。

SimpleXML基础:加载XML数据
使用SimpleXML操作XML的第一步是加载XML数据,SimpleXML提供了两个常用的加载函数:simplexml_load_string用于加载字符串形式的XML,simplexml_load_file用于加载本地或远程的XML文件。
<?php
// 从字符串加载XML
$xml_str = '<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<title>PHP编程入门</title>
<author>张三</author>
<price>59.9</price>
</book>
</bookstore>';
$bookstore = simplexml_load_string($xml_str);
// 从文件加载XML,假设本地有bookstore.xml文件
// $bookstore = simplexml_load_file('bookstore.xml');
// 加载远程XML(需要开启allow_url_fopen配置)
// $bookstore = simplexml_load_file('https://ipipp.com/bookstore.xml');
?>读取XML节点内容
加载XML后,可以直接通过对象属性的方式访问根节点下的子节点,如果节点存在多个,会返回包含所有同名节点的数组。
<?php
// 读取第一个book节点的title内容
$title = $bookstore->book[0]->title;
echo $title; // 输出:PHP编程入门
// 读取所有book的author
foreach ($bookstore->book as $book) {
echo $book->author . PHP_EOL;
}
?>读取节点属性
XML节点的属性可以通过数组语法访问,属性名作为键名即可获取对应的值。
<?php
// 读取第一个book节点的id属性
$book_id = $bookstore->book[0]['id'];
echo $book_id; // 输出:1
// 遍历所有book的属性
foreach ($bookstore->book as $book) {
echo '书籍ID:' . $book['id'] . PHP_EOL;
}
?>修改和新增XML节点
SimpleXML支持直接修改现有节点的内容,也可以通过添加子节点和属性的方式扩展XML结构,修改后可以通过asXML方法输出XML字符串或保存到文件。
<?php
// 修改第一个book的价格
$bookstore->book[0]->price = 69.9;
// 新增一个book节点
$new_book = $bookstore->addChild('book');
$new_book->addAttribute('id', '2');
$new_book->addChild('title', 'PHP进阶实战');
$new_book->addChild('author', '李四');
$new_book->addChild('price', '79.9');
// 输出修改后的XML
echo $bookstore->asXML();
// 保存到文件
$bookstore->asXML('new_bookstore.xml');
?>注意事项
- SimpleXML只能处理格式规范的XML,如果XML格式错误会返回false,建议加载后用
is_bool判断加载是否成功。 - 当节点名称包含特殊字符或者和PHP关键字冲突时,需要使用大括号包裹节点名,例如
$xml->{'book-list'}。 - 如果需要处理命名空间XML,需要结合
children和attributes方法指定命名空间参数。