在PHP开发中,生成XML文档是常见的需求,而XMLWriter扩展就是专门用来处理这类任务的工具。

XMLWriter扩展基础介绍
XMLWriter是PHP内置的扩展,默认情况下大部分PHP环境都已经开启,不需要额外安装。它采用流式写入的模式,逐个节点写入XML内容,内存占用低,效率很高,非常适合生成结构复杂的XML文档。
核心方法说明
使用时需要先了解几个常用的方法:
- openMemory():在内存中开辟空间,后续写入的内容都存放在内存中
- openURI($uri):直接把生成的XML内容写入到指定的文件或输出流
- startDocument($version, $encoding):设置XML文档的版本和编码
- startElement($name):开始一个指定名称的元素节点
- writeElement($name, $content):直接写入一个完整的元素节点,包含元素名和文本内容
- writeAttribute($name, $value):给当前元素节点添加属性
- endElement():结束当前正在编写的元素节点
- endDocument():结束整个XML文档的编写
- outputMemory($flush):输出内存中存储的XML内容,flush为true时会清空内存
生成基础XML文档示例
下面通过一个简单的示例,演示用XMLWriter生成一个包含用户信息的XML文档:
<?php
// 初始化XMLWriter对象
$writer = new XMLWriter();
// 在内存中开启写入
$writer->openMemory();
// 设置XML版本和编码
$writer->startDocument('1.0', 'UTF-8');
// 开始根元素user_list
$writer->startElement('user_list');
// 第一个用户节点
$writer->startElement('user');
// 添加id属性
$writer->writeAttribute('id', '1001');
// 写入姓名元素
$writer->writeElement('name', '张三');
// 写入年龄元素
$writer->writeElement('age', '25');
// 结束user节点
$writer->endElement();
// 第二个用户节点
$writer->startElement('user');
$writer->writeAttribute('id', '1002');
$writer->writeElement('name', '李四');
$writer->writeElement('age', '28');
$writer->endElement();
// 结束根元素
$writer->endElement();
// 结束文档编写
$writer->endDocument();
// 输出生成的XML内容
echo $writer->outputMemory(true);
?>运行上面的代码,会输出如下格式的XML内容:
<?xml version="1.0" encoding="UTF-8"?>
<user_list>
<user id="1001">
<name>张三</name>
<age>25</age>
</user>
<user id="1002">
<name>李四</name>
<age>28</age>
</user>
</user_list>直接输出到文件场景
如果需要把生成的XML直接保存到文件,不需要先存到内存再输出,可以使用openURI方法:
<?php
$writer = new XMLWriter();
// 直接写入到指定文件,文件不存在会自动创建
$writer->openURI('/tmp/user_data.xml');
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('config');
$writer->writeElement('site_name', '测试站点');
$writer->writeElement('site_url', 'https://ipipp.com/demo');
$writer->endElement();
$writer->endDocument();
?>执行后,/tmp/user_data.xml文件中就会保存生成的XML内容,这种方式不需要额外处理内存,适合生成大文件时使用。
注意事项
使用XMLWriter时需要注意,元素的开始和结束要配对,如果调用了startElement就必须对应调用endElement,否则生成的XML会出现结构错误。另外写入文本内容时,特殊字符会被自动转义,不需要手动处理,比如文本内容里的<符号会被自动转成<,保证XML格式规范。
XMLWriterPHP_XMLXML生成writeElement修改时间:2026-05-24 22:40:43