You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用SimpleXMLElement生成下载的XML仅2行,如何输出缩进格式化结构

两种XML排版功能等效

带缩进格式化的XML和压缩成单行的XML在功能上完全一致,所有标准XML解析器都会默认忽略节点之间的空白缩进字符,两种格式的节点结构、属性、数据完全相同,不会影响任何程序的读取和解析效果,区别仅在于人类阅读时的可读性。

实现缩进格式化输出的方案

SimpleXMLElement默认输出不做格式化处理,你可以配合PHP内置的DOMDocument实现自动缩进排版,修改你的代码中输出部分的逻辑即可,完整可运行的代码如下:

$xml_header = '<?xml version="1.0" encoding="UTF-8"?><Example></Example>';
$xml = new SimpleXMLElement($xml_header);

$node1 = $xml->addChild('node');
$node1->addAttribute('id', '1');
$node1->addAttribute('name', 'node 1');

$subnode1 = $node1->addChild('subnode');
$subnode1->addAttribute('id', '1.1');
$subnode1->addAttribute('name', 'subnode 1.1');

$subnode2 = $node1->addChild('subnode');
$subnode2->addAttribute('id', '1.2');
$subnode2->addAttribute('name', 'subnode 1.2');

$inner_node1 = $subnode2->addChild('inner_node');
$inner_node1->addAttribute('id', '1.2.1');
$inner_node1->addAttribute('name', 'inner node 1.2.1');

// 新增格式化处理逻辑
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
$dom->preserveWhiteSpace = false;
$dom->loadXML($xml->asXML());

header('Content-Disposition: attachment; filename="text.xml"');
// 原Content-type头的多余引号已移除,避免部分浏览器识别异常
header('Content-type: text/xml; charset=utf-8');
echo $dom->saveXML();

修改后输出的XML就会自动带上层级缩进,和你预期的效果一致。

内容的提问来源于stack exchange,提问作者Markos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:06