PHP生成XML最常用方式是数组递归转XML,推荐SimpleXML封装递归函数或DOMDocument;需处理数字键、特殊字符、空值、布尔值及UTF-8编码,并正确声明与输出。

PHP生成XML文件最常用的方式是将数组递归转换为XML结构,核心在于避免直接拼接字符串(易出错、难维护),推荐使用 SimpleXML 或自定义递归函数实现安全、可读、可扩展的转换。
用 SimpleXML + 数组递归生成 XML
SimpleXML 本身不直接支持数组转 XML,但可以封装一个递归函数,把多维 PHP 数组逐层转为 SimpleXMLElement 对象:
- 创建根节点:
$xml = new SimpleXMLElement(''); - 编写递归函数,对数组键值分别处理:字符串值设为节点内容,子数组则创建子节点
- 遇到数字索引(如
[0], [1])时,建议统一用相同标签名(如),避免 XML 标签名含数字或非法字符 - 自动对特殊字符(
&、、>等)进行转义,无需手动 htmlspecialchars
处理常见数组结构的技巧
实际开发中,数组常含混合类型(关联/索引、空值、布尔、数字)。转换时需注意:
- 空数组
[]可转为空节点()或忽略,按业务决定 - 布尔值
true/false建议转为字符串"true"/"false",或添加属性type="boolean" - 数字键(如
[0] => 'a', [1] => 'b')应统一包裹,例如:- a
- b
- 键名含空格、短横线、中文?提前校验并替换(如转下划线),否则会生成非法 XML 标签
保存为 .xml 文件并设置正确响应头
生成 XML 后,保存到文件或输出给浏览器需注意编码与格式:
立即学习“PHP免费学习笔记(深入)”;
- 确保整个流程使用 UTF-8 编码(数组源、XML 声明、文件写入)
- 生成时加上声明:
$xml->asXML()默认不含声明,可用preg_replace或手动拼接 - 保存文件:
file_put_contents('data.xml', $xml->asXML()); - 直接输出给浏览器:先设 header
header('Content-Type: application/xml; charset=utf-8');,再 echo 完整 XML 字符串
替代方案:使用 DOMDocument(更严格、适合复杂场景)
若需精确控制文档类型(DOCTYPE)、CDATA、命名空间或格式化缩进,DOMDocument 更合适:
- 创建
$dom = new DOMDocument('1.0', 'UTF-8'); - 用
$dom->formatOutput = true;自动缩进美化 - 通过
$dom->createElement()和$dom->appendChild()手动构建节点,比 SimpleXML 略繁琐但可控性更强 - 对含 CDATA 的内容(如 HTML 片段),用
$dom->createCDATASection()安全嵌入











