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解析器


总结:DOM解析器把整个XML文档变成一棵可以随意导航和修改的内存树,让你能用类似操作HTML DOM的完整API对XML进行任何复杂的增删改查操作。

点赞(0)

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

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

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

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

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

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

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

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

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