XMLReader 是 PHP 基于拉模式的轻量级 XML 解析器,逐节点读取、内存占用低;通过 read() 遍历节点,用 nodeType 和 name 定位元素,getAttribute() 读属性,readString() 安全获取非空文本,depth 控制嵌套层级。

PHP 的 XMLReader 是一个基于拉模式(Pull Parsing)的 XML 解析器,适合处理大文件、内存受限或只需部分数据的场景。它不像 DOM 那样一次性加载整个文档,而是像“读取器”一样逐节点推进,边读边处理,内存占用低、速度快。
先创建实例,打开 XML 文件或字符串,然后用 read() 逐个移动到下一个节点:
$reader = new XMLReader();$reader->open('data.xml'); 或 $reader->xml($xmlString);
$reader->read(),返回 true 表示还有节点,false 表示结束$reader->nodeType、$reader->name、$reader->value(文本内容)、$reader->depth 等常用节点类型常量有:XMLReader::ELEMENT(开始标签)、XMLReader::END_ELEMENT(结束标签)、XMLReader::TEXT(文本内容)、XMLReader::ATTRIBUTE(属性)。实际中多按元素名过滤:
if ($reader->nodeType === XMLReader::ELEMENT && $reader->name === 'item') 定位目标元素$reader->readInnerXml() 读取其全部子内容(含标签),或用 $reader->readOuterXml() 包含自身标签ELEMENT 节点上调用 $reader->getAttribute('id') 或遍历所有属性用 $reader->moveToFirstAttribute() 配合循环XML 中换行缩进会产生大量 TEXT 节点(仅含空白),直接取 $reader->value 可能为空或不可靠。推荐做法:
立即学习“PHP免费学习笔记(深入)”;
$reader->nodeType === XMLReader::TEXT && trim($reader->value) !== ''
$reader->read() 进入其子节点,再用 $reader->readString() —— 它会自动跳过空白节点,返回紧邻的非空文本内容<title>Hello</title>:先停在 title 开始标签,再调一次 read() 到 TEXT 节点,然后 readString() 得到 "Hello"处理带层级的 XML(如 RSS、配置文件)时,可借助 $reader->depth 判断当前嵌套层级,或用 $reader->isEmptyElement 快速识别自闭合标签(如 <img alt="PHP XMLReader怎么用 拉模式解析XML" >):
$depth,之后循环 read() 直到 $reader->depth ,即退出该作用域
<user></user> 各含 <name></name> 和 <email></email>),可在进入 user 时初始化数组,遇到子元素时提取值并赋给对应键$reader->next('user') 快速跳到下一个同名元素,避免手动遍历不复杂但容易忽略细节,关键是理解“拉”的节奏:你决定什么时候读、读多少、读到哪一层。用好 read()、readString()、getAttribute() 和 depth,就能稳稳解析任意大小的 XML。
以上就是PHP XMLReader怎么用 拉模式解析XML的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号