PHP生成XML最常用方式是SimpleXML扩展,用simplexml_load_string初始化根节点,通过addChild添加子元素、addAttribute设置属性,遍历数组时需htmlspecialchars转义,最后用asXML()保存文件。

PHP 生成 XML 文件最常用、最简洁的方式就是用 SimpleXML 扩展,它把 XML 当作对象来操作,无需手动拼接字符串或处理 DOM 的繁杂节点。只要理解几个核心方法,几行代码就能生成结构清晰、格式规范的 XML 文件。
创建空 XML 文档并添加根元素
SimpleXML 不支持直接从头新建一个空白文档(如 new SimpleXMLElement()),但可以用一个最小的 XML 字符串初始化:
-
推荐写法:
$xml = simplexml_load_string(''); - 这样就得到一个可操作的 SimpleXMLElement 对象,
$xml就是根节点 - 注意:不能用
new SimpleXMLElement(''),会报错;也不能用new SimpleXMLElement('(PHP 8.0+ 允许,但兼容性差)')
动态添加子元素和属性
往根节点下加内容非常直观,就像给对象赋值一样:
- 添加子元素:
$item = $xml->addChild('item'); - 设置文本内容:
$item->addChild('title', 'PHP入门教程'); - 添加带属性的节点:
$item->addAttribute('id', '101'); - 追加多个同名节点:
$xml->addChild('tag', 'web')->addAttribute('lang', 'zh');
注意:addChild 返回新创建的节点对象,支持链式调用;addAttribute 只能加在已有节点上,不能链在字符串值后面(比如 $xml->title = 'abc'->addAttribute(...) 是错的)。
立即学习“PHP免费学习笔记(深入)”;
处理数组数据批量生成 XML
实际项目中常需把 PHP 数组转成 XML,SimpleXML 本身不内置数组转换,但可以轻松手写循环:
- 遍历关联数组,用键名作标签名,值作内容:
foreach ($data as $key => $val) { $xml->addChild($key, htmlspecialchars($val)); } - 对多维数组,递归函数更稳妥(避免标签名含非法字符,如空格、数字开头)
- 务必对内容做
htmlspecialchars($val, ENT_XML1)转义,防止特殊字符(如、&)破坏 XML 结构
保存为文件并设置正确头部
生成完 XML 后,用 asXML() 输出内容,再用 file_put_contents() 写入文件:
file_put_contents('output.xml', $xml->asXML());- 如果想让浏览器正确识别,输出前加 HTTP 头:
header('Content-Type: application/xml; charset=utf-8'); - 确保整个脚本输出的是纯 XML(不要有 echo、var_dump 或空白行),否则 XML 解析会失败
- asXML() 默认以 UTF-8 编码输出,若需声明编码,在初始化时用:
$xml = simplexml_load_string('');
基本上就这些。SimpleXML 不适合超大 XML 或需要精细命名空间控制的场景,但对日常配置生成、API 响应、数据导出等任务,够用、好读、不易出错。











