在PHP开发中,我们经常需要读取或者处理XML格式的数据,比如第三方接口返回的结果、配置文件等。SimpleXML是PHP内置的一个扩展,它把XML文档映射成对象结构,让我们可以用很简洁的语法访问节点和属性,不需要像DOM那样写很多繁琐的代码。

怎么加载XML数据
SimpleXML提供了几个常用的函数来加载XML,分别是从字符串加载、从文件加载和从URL加载。
从字符串加载
使用 simplexml_load_string 可以把一段XML文本转成 SimpleXMLElement 对象。
<?php
$xmlStr = '<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>PHP入门</title>
<price>39.9</price>
</book>';
$obj = simplexml_load_string($xmlStr);
echo $obj->title; // 输出:PHP入门
echo $obj->price; // 输出:39.9
?>
从文件加载
如果XML内容在文件里,可以用 simplexml_load_file 直接读取。
<?php
$obj = simplexml_load_file('book.xml');
if ($obj === false) {
echo '加载XML失败';
} else {
echo $obj->title;
}
?>
怎么读取节点和属性
当XML带有属性时,可以用数组式语法来获取。下面示例展示怎么读取子节点和属性值。
<?php
$xml = '<?xml version="1.0"?>
<user id="1001">
<name>张三</name>
<email>test@ipipp.com</email>
</user>';
$u = simplexml_load_string($xml);
echo $u['id']; // 输出属性:1001
echo $u->name; // 输出:张三
echo $u->email; // 输出:test@ipipp.com
?>
怎么遍历多个子节点
如果某个节点下有多个同名子元素,可以用 foreach 来遍历。
<?php
$xml = '<?xml version="1.0"?>
<list>
<item>苹果</item>
<item>香蕉</item>
<item>橙子</item>
</list>';
$data = simplexml_load_string($xml);
foreach ($data->item as $it) {
echo $it . "n";
}
?>
使用 XPath 查找节点
SimpleXML支持用 XPath 语法快速定位节点,通过 xpath 方法实现。
<?php
$xml = '<?xml version="1.0"?>
<shop>
<goods type="fruit">苹果</goods>
<goods type="book">PHP教程</goods>
</shop>';
$s = simplexml_load_string($xml);
$res = $s->xpath('//goods[@type="book"]');
echo $res[0]; // 输出:PHP教程
?>
注意事项
- SimpleXML只能处理格式良好的XML,标签未闭合会加载失败
- 获取到的节点对象在直接输出时会转成字符串,若需判断是否存在可用 isset
- 处理命名空间XML时要使用 children 或 attributes 方法并传入空间参数
通过上述方法,你已经在PHP中掌握了SimpleXML的基本使用方式,可以应对大部分XML解析场景。