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
相关产品推荐
相关产品推荐

