DOM解析器将整个XML文档加载到内存中,构建成一棵完整的节点树,你可以像操作JavaScript DOM一样随意访问和修改XML的任何部分。
简单来说,DOM解析器就是把xml变成一棵树:
比如我们有这么一个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>
DOM解析器会把它变成这样:
Document (文档节点) └── Element: dotcpp (根元素节点) ├── Element: brand │ └── Text: "Dotcpp编程" ├── Element: website │ └── Text: "dotcpp.com" ├── Element: course │ └── Text: "PHP教程" └── Element: courses ├── Element: course [id="1"] │ └── Text: "PHP基础" ├── Element: course [id="2"] │ └── Text: "PHP高级" └── Element: course [id="3"] └── Text: "PHP框架"
实际操作:
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. 通过DOM解析器解析dotcpp.xml:
<?php
// 创建并加载DOM
$dom = new DOMDocument();
$dom->load(__DIR__ ."/dotcpp.xml");
// 1. 获取根元素
$dotcpp = $dom->documentElement;
echo "<h2>DOM解析示例</h2>";
// 2. 获取直接子元素
echo "<h3>基本信息:</h3>";
$brand = $dom->getElementsByTagName('brand')->item(0);
$website = $dom->getElementsByTagName('website')->item(0);
echo "品牌: " . $brand->nodeValue . "<br>";
echo "网站: " . $website->nodeValue . "<br>";
// 3. 遍历课程
echo "<h3>课程列表:</h3>";
$courses = $dom->getElementsByTagName('course');
foreach ($courses as $course) {
$id = $course->getAttribute('id');
if ($id) { // 只显示带id的课程
echo "课程{$id}: " . $course->nodeValue . "<br>";
}
}
// 4. 使用XPath查询
echo "<h3>XPath查询(id>1的课程):</h3>";
$xpath = new DOMXPath($dom);
$results = $xpath->query('//course[@id > "1"]');
foreach ($results as $result) {
echo $result->getAttribute('id') . ": " . $result->nodeValue . "<br>";
}
?>3. 将php脚本粘贴至test.php,保存并访问;

总结:DOM解析器把整个XML文档变成一棵可以随意导航和修改的内存树,让你能用类似操作HTML DOM的完整API对XML进行任何复杂的增删改查操作。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程