PHP 如何读取 XML
在日常做网站开发、数据导入导出时,经常会碰到XML格式的内容——比如老网站的商品数据备份、第三方平台的接口返回结果,很多时候都会用XML来存数据。很多新手刚接触PHP时,会觉得读取XML是个“高大上”的技术,其实只要掌握了基础方法,跟着生活化的例子就能轻松搞定。
先搞懂XML的“样子”,再谈读取
XML本质就是“带标签的文本”,就像小时候玩的文件夹收纳:你可以把每个标签当成一个文件夹,标签里的内容就是文件夹里的东西。举个例子,一个存学生信息的XML,看起来是这样的:

`xml
<students>
<student id="1">
<name>小明</name>
<age>12</age>
<class>三年级2班</class>
</student>
<student id="2">
<name>小红</name>
<age>11</age>
<class>三年级1班</class>
</student>
</students>
`
这里<students>是总文件夹,<student>是每个子文件夹,id是文件夹的“备注属性”,<name><age>就是文件夹里的具体内容。PHP读取XML,核心就是把这些“文件夹”和“内容”拆出来用。
方法一:用SimpleXML,新手最容易上手
PHP自带了SimpleXML工具,相当于给XML做了个“翻译器”,不用记复杂规则,直接用对象调用就行,特别适合新手。
假设我们把上面的XML存成了students.xml文件,读取的代码就像“打开文件夹找东西”:
`php
// 1. 加载XML文件,相当于“打开总文件夹”
$xml = simplexml_load_file('students.xml');
// 2. 遍历所有student子文件夹,相当于“挨个翻每个学生的信息”
foreach ($xml->student as $stu) {
// 拿name内容:就像拿文件夹里的“小明”,拿id属性就像拿文件夹的“编号1”
echo "学生姓名:{$stu->name},班级:{$stu->class},学号:{$stu['id']}<br>";
}
`
输出结果会是清晰的两行学生信息,完全不用管XML的底层语法,就像用记事本读自己整理的表格一样简单。如果是直接读取一段XML字符串(比如从接口拿到的XML内容),把simplexml_load_file换成simplexml_load_string就行,用法几乎一样。
方法二:DOMDocument,更灵活的进阶选择
如果需要处理更复杂的XML(比如要修改内容、找深层嵌套的标签),DOMDocument就像“带放大镜的文件夹整理器”,能精准定位任意内容。还是刚才的学生XML,要找所有年龄大于11岁的学生,代码可以这么写:
`php
// 加载XML文件
$dom = new DOMDocument();
$dom->load('students.xml');
// 找所有student标签,相当于“定位所有学生文件夹”
$students = $dom->getElementsByTagName('student');
foreach ($students as $stu) {
// 拿age标签的内容,转成数字做比较
$age = (int)$stu->getElementsByTagName('age')->item(0)->nodeValue;
if ($age > 11) {
echo "年龄超标的学生:" . $stu->getElementsByTagName('name')->item(0)->nodeValue . "<br>";
}
}
`
这个方法的优势是灵活,适合需要对XML做精细化操作的场景,比如老网站数据迁移时,要过滤掉不符合要求的内容。
新手容易踩的小坑
很多刚学的人会犯两个小错误:一是XML的标签大小写敏感,比如写<Name>和<name>是两个完全不同的标签,就像文件夹名写错了找不到;二是如果XML有中文,要确保文件是UTF-8编码,不然会出现乱码,就像用错了语言词典,翻出来的内容看不懂。
其实PHP读取XML的核心逻辑,就是把XML的层级结构,转换成PHP能读懂的数组或对象,不管用哪种方法,只要先理清楚XML的标签结构,再对应着写代码,就不会出错。