上一节我们简单介绍了什么是SimpleXML解析器,本节我们将深入学习SimpleXML解析器的核心内置函数。

我们先通过一张表格来总览SimpleXML解析器的核心内置函数。

类别函数/方法描述
核心加载函数simplexml_load_string(string $data)将 XML 字符串 解析为 SimpleXMLElement 对象。
simplexml_load_file(string $filename)将 XML 文件 解析为 SimpleXMLElement 对象。
simplexml_import_dom(DOMNode $node)将 DOM 节点 转换为 SimpleXMLElement 对象。
对象方法attributes([string $ns, bool $is_prefix])获取当前元素的属性。返回 SimpleXMLElement 对象。
children([string $ns, bool $is_prefix])获取当前元素的子元素
getName()获取当前元素的名称
addChild(string $name [, string $value [, string $ns]])为当前元素添加子元素。返回新添加的子元素对象。
addAttribute(string $name, string $value [, string $ns])为当前元素添加属性
asXML([string $filename])将 SimpleXML 元素转换回 XML 字符串,或保存到文件。
__toString()获取当前元素的文本内容(字符串)。
xpath(string $path)使用 XPath 表达式 查询元素。返回匹配元素的数组。
registerXPathNamespace(string $prefix, string $ns)为 XPath 查询注册命名空间前缀
辅助函数simplexml_load_string 的第二个参数指定要使用的节点类名 (默认是 SimpleXMLElement)。
simplexml_load_file 的第二个参数同上,指定节点类名。
libxml_use_internal_errors(bool $use_errors)启用/禁用 libxml 内部错误捕获,用于调试解析错误。
libxml_get_errors()获取 libxml 解析过程中产生的错误数组。
数据访问 (特性)对象属性访问通过 -> 访问元素节点
数组下标访问通过 ['属性名'] 访问属性
数组迭代多个同名兄弟节点可直接使用 foreach
数字下标访问通过 [索引] 访问特定位置的兄弟节点
字符串转换将 SimpleXMLElement 对象强制转换为 string 获取其文本值

SimpleXML解析器的核心内置函数很多,这里我们通过一个案例让您认识其最实用的方法(包括查询xml数据和修改xml数据)。

1. 先准备一个dotcpp.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<dotcpp>
    <brand>Dotcpp编程</brand>
    <website>dotcpp.com</website>
    <course>PHP教程</course>
    <courses>
        <course id="1">PHP基础</course>
        <course id="2">PHP高级</course>
        <course id="3">PHP框架</course>
    </courses>
</dotcpp>

2. 实操SimpleXML内置函数。

<?php
// 1. 加载与基本访问
$xml = simplexml_load_file('dotcpp.xml');
if ($xml === false) {
    die('无法加载XML文件');
}
echo "1. 基本访问示例:<br>";
echo "品牌:" . $xml->brand . "<br>";           // 访问元素
echo "网站:" . $xml->website . "<br>";
echo "课程:" . $xml->course . "<br><br>";
// 2. 遍历与查询
echo "2. 遍历课程列表:<br>";
foreach ($xml->courses->course as $course) {
    echo "课程" . $course['id'] . ":" . $course . "<br>";
}
echo "<br>";
// 3. 使用 XPath 查询
echo "3. 使用XPath查询(id为2的课程):<br>";
$results = $xml->xpath('//course[@id="2"]');
foreach ($results as $course) {
    echo "查询结果:" . $course . " (ID: " . $course['id'] . ")<br>";
}
echo "<br>";
// 4. 处理属性
echo "4. 处理属性示例:<br>";
// 方法1:直接访问
$firstCourse = $xml->courses->course[0];
echo "第一个课程的ID:" . $firstCourse['id'] . "<br>";
// 方法2:使用attributes()方法
$attrs = $firstCourse->attributes();
echo "属性方法获取ID:" . $attrs['id'] . "<br><br>";
// 5. 遍历所有属性
echo "5. 所有课程的属性遍历:<br>";
foreach ($xml->courses->course as $course) {
    echo "课程:" . $course . ",";
    foreach ($course->attributes() as $name => $value) {
        echo "{$name}:{$value} ";
    }
    echo "<br>";
}
echo "<br>";
// 6. 修改并保存
echo "6. 修改并保存XML:<br>";
// 添加新课程
$newCourse = $xml->courses->addChild('course', 'PHP实战项目');
$newCourse->addAttribute('id', '4');
$newCourse->addAttribute('level', '高级');
// 添加新元素到根节点
$xml->addChild('description', '提供专业的编程教程');
// 保存到新文件
$xml->asXML('dotcpp_updated.xml');
echo "XML已更新并保存到 dotcpp_updated.xml<br>";
// 显示更新后的结构
echo "<br>7. 更新后的课程列表:<br>";
foreach ($xml->courses->course as $course) {
    $id = isset($course['id']) ? $course['id'] : '未知';
    $level = isset($course['level']) ? " (级别:" . $course['level'] . ")" : "";
    echo "课程{$id}:" . $course . $level . "<br>";
}
?>

3. 查看访问效果:

3.1 test.php页面展示:

SimpleXML解析器的核心内置函数

3.2 查看dotcppupdate.xml文件:

asXML() 函数


总结:SimpleXML以最直观的对象属性语法,将复杂的XML数据变成了PHP中可以直接“点”出来的数据结构,让XML解析从繁琐的DOM操作变成了近乎透明的数据访问,极大降低了PHP处理XML的门槛和代码复杂度。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)