PHP内置的SimpleXML扩展让解析XML变得十分轻松。它把XML文档映射成可遍历的对象结构,开发者可以用类似访问对象属性的方式读取节点与属性,也可以用xpath做复杂查询。下面先看一个基础的解析示例。

加载XML并读取节点
可以使用simplexml_load_string()从字符串加载,或用simplexml_load_file()从文件加载。以下代码演示读取图书列表:
<?php
$xmlStr = '<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1">
<title>PHP基础</title>
<author>张三</author>
</book>
<book id="2">
<title>XML入门</title>
<author>李四</author>
</book>
</library>';
// 加载XML字符串
$xml = simplexml_load_string($xmlStr);
if ($xml === false) {
die('XML解析失败');
}
// 遍历每本书
foreach ($xml->book as $book) {
// 读取属性
$id = (string)$book['id'];
// 读取子节点
$title = (string)$book->title;
$author = (string)$book->author;
echo "ID:{$id} 书名:{$title} 作者:{$author}n";
}
?>
使用xpath提取数据
当XML结构较复杂时,可以用xpath精准定位节点。下面的例子找出所有作者为李四的图书标题:
<?php
$xml = simplexml_load_string($xmlStr);
// xpath查询
$results = $xml->xpath('/library/book[author="李四"]/title');
foreach ($results as $titleNode) {
echo "找到书名:" . (string)$titleNode . "n";
}
?>
处理命名空间
如果XML带有命名空间,需要先注册再用xpath查询。示例如下:
<?php
$nsXml = '<root xmlns:ns="http://ipipp.com/ns">
<ns:item>测试内容</ns:item>
</root>';
$xml = simplexml_load_string($nsXml);
$xml->registerXPathNamespace('ns', 'http://ipipp.com/ns');
$items = $xml->xpath('//ns:item');
foreach ($items as $item) {
echo (string)$item . "n";
}
?>
常见注意事项
- 读取节点时应显式转换为字符串或整型,避免后续拼接出现对象类型问题。
- 解析外部XML文件时要校验返回值是否为false,防止恶意或错误格式导致异常。
- 若XML体积很大,SimpleXML会一次性载入内存,此时可考虑使用XMLReader做流式处理。
通过上述方式,你可以快速在PHP中使用SimpleXML完成大多数XML解析任务,代码直观且容易维护。