PHP 如何读取 XML

在日常做网站开发、数据导入导出时,经常会碰到XML格式的内容——比如老网站的商品数据备份、第三方平台的接口返回结果,很多时候都会用XML来存数据。很多新手刚接触PHP时,会觉得读取XML是个“高大上”的技术,其实只要掌握了基础方法,跟着生活化的例子就能轻松搞定。

先搞懂XML的“样子”,再谈读取

XML本质就是“带标签的文本”,就像小时候玩的文件夹收纳:你可以把每个标签当成一个文件夹,标签里的内容就是文件夹里的东西。举个例子,一个存学生信息的XML,看起来是这样的:

PHP 如何读取 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的标签结构,再对应着写代码,就不会出错。

上一篇 C / C++ 编程语言的核心特性与应用场景,入门者必知的基础知识科普