PHP XML 教程:创建、解析、读取示例
⚡ 智能摘要
PHP 和 XML 协同工作,用于构建、存储和交换系统间的数据。本教程将解释 XML、DOM 和 XML 解析器,然后演示如何使用 SimpleXML 读取 XML 文档以及如何使用 DOMDocument 类创建 XML 文档,最后介绍何时使用它们。

什么是 XML?
XML 是可扩展标记语言的缩写。
XML 用于构建、存储和传输系统之间的数据。
XML 与 HTML 类似,都使用开始标签和结束标签。但与 HTML 不同的是,XML 允许用户自定义标签。
什么是DOM?
DOM 是文档对象模型的缩写。
它是一种跨平台、语言无关的标准,定义了如何访问和操作数据:
- HTML
- 的XHTML
- XML
DOM XML 用于访问和操作 XML 文档。它 查看 XML 文档 呈树状结构。
XML 解析器
XML 解析器是一种将 XML 文档转换为 XML 文档对象模型 (DOM) 对象的程序。
然后可以使用以下方法操作 XML DOM 对象 Java脚本, PythonPHP 和其他语言。
关键字 CDATA(未解析字符数据)用于在解析 XML 文档时忽略“<”和“>”等特殊字符。
为什么使用 XML?
- 诸如 SOAP 和 REST 之类的 Web 服务使用 XML 格式来交换信息。了解 XML 的概念和工作原理能让你作为开发人员获得竞争优势,因为现代应用程序大量使用 Web 服务。
- XML 文档可用于存储应用程序的配置设置。
- 它允许您创建自己的自定义标签,这使得它更加灵活。
XML 文档示例
假设你正在开发ping 一个从 Web 服务以 XML 格式获取数据的应用程序。
下面是一个 XML 文档示例。
<?xml version="1.0" encoding="utf-8"?> <employees status = "ok"> <record man_no = "101"> <name>Joe Paul</name> <position>CEO</position> </record> <record man_no = "102"> <name>Tasha Smith</name> <position>Finance Manager</position> </record> </employees>
这里,
- “指定要使用的 XML 版本和编码。
- “ ” 是根元素。
- “ … ”是子元素,每个员工记录一个。
如何使用 PHP 读取 XML
现在让我们编写代码,读取员工 XML 文档并在 Web 浏览器中显示结果。 的index.php
<?php $xml = simplexml_load_file('employees.xml'); echo '<h2>Employees Listing</h2>'; $list = $xml->record; for ($i = 0; $i < count($list); $i++) { echo '<b>Man no:</b> ' . $list[$i]->attributes()->man_no . '<br>'; echo 'Name: ' . $list[$i]->name . '<br>'; echo 'Position: ' . $list[$i]->position . '<br><br>'; } ?>
这里,
- “$xml = simplexml_load_file('employees.xml');” 使用 simplexml_load_file 函数加载名为 employees.xml 的文件,并将内容赋值给变量 $xml。
- “$list = $xml->record;” 获取记录节点的内容。
- “for ($i = 0; $i < count(…)…” 是一个 for 循环,它读取数组并输出结果。
- “$list[$i]->attributes()->man_no;”读取元素的man_no属性
- “$list[$i]->name;”读取name子元素的值
- “$list[$i]->position;”读取position子元素的值
测试 XML 读取器
假设您已将 index.php 文件保存在 phptuts/xml 文件夹中,请浏览到该文件夹。 URL http://localhost/phptuts/xml/index.php
如何使用 PHP 创建 XML 文档
我们现在将研究如何使用 PHP 创建 XML 文档。
以下代码使用 PHP 内置类 DOMDocument 创建 XML 文档。
<?php $dom = new DOMDocument(); $dom->encoding = 'utf-8'; $dom->xmlVersion = '1.0'; $dom->formatOutput = true; $xml_file_name = 'movies_list.xml'; $root = $dom->createElement('Movies'); $movie_node = $dom->createElement('movie'); $attr_movie_id = new DOMAttr('movie_id', '5467'); $movie_node->setAttributeNode($attr_movie_id); $child_node_title = $dom->createElement('Title', 'The Campaign'); $movie_node->appendChild($child_node_title); $child_node_year = $dom->createElement('Year', 2012); $movie_node->appendChild($child_node_year); $child_node_genre = $dom->createElement('Genre', 'Comedy'); $movie_node->appendChild($child_node_genre); $child_node_ratings = $dom->createElement('Ratings', 6.2); $movie_node->appendChild($child_node_ratings); $root->appendChild($movie_node); $dom->appendChild($root); $dom->save($xml_file_name); echo "$xml_file_name has been successfully created"; ?>
这里,
- “$dom = new DOMDocument();” 创建一个 DOMDocument 类的实例。
- “$dom->encoding = 'utf-8';”将文档编码设置为 utf-8
- “$dom->xmlVersion = '1.0';”指定版本号1.0
- “$dom->formatOutput = true;” 确保输出格式正确
- “$root = $dom->createElement('Movies');” 创建名为 Movies 的根节点
- “$attr_movie_id = new DOMAttr('movie_id', '5467');”定义了电影节点的 movie_id 属性。
- “$dom->createElement('ElementName', 'ElementValue')” 创建一个子节点。ElementName 指定元素的名称,例如“标题”。ElementValue 设置子节点的值,例如“活动”。
- “$root->appendChild($movie_node);” 将电影节点添加到根节点“Movies”。
- “$dom->appendChild($root);”将根节点附加到 XML 文档。
- “$dom->save($xml_file_name);”将XML文件保存在Web服务器的根目录中。
- “echo “$xml_file_name 已成功创建”;” 显示成功消息。
测试 XML Creator
假设您已将文件 create_movies_list.php 保存在 phptuts/xml 文件夹中,请浏览到该文件夹。 URL http://localhost/phptuts/xml/create_movies_list.php
打开 movies_list.xml 文件。
SimpleXML 与 DOMDocument
PHP 提供了两种处理 XML 的主要方式。如果您主要需要读取数据,那么 SimpleXML 是最佳选择;而 DOMDocument 则提供了更精细的控制,适用于构建和深度编辑文档。下表对它们进行了比较。
| 方面 | SimpleXML的 | DOM文档 |
|---|---|---|
| 使用方便 | 非常简单;该文档的行为就像嵌套对象一样。 | 更详细的、基于节点的 API |
| 最适合 | 阅读和轻度编辑 | 创建文档和复杂操作 |
| 访问样式 | $xml->record->name | createElement() 和 appendChild() |
| XPath 支持 | 是的,通过 ->xpath() | 是的,通过 DOMXPath 类。 |
一个实用的规则是,对于读取源和简单文件,首先选择 SimpleXML,而当需要创建文档、在特定位置插入节点或根据模式进行验证时,则切换到 DOMDocument。



