<?xml version="1.0" encoding="utf-8"?><items>
<item><title>title3</title><desc>This is some desc3</desc></item></items>
使用asXML()输出时,每个节点元素之间没有换行符?
如何通过在包含子元素节点的每个XML元素打开和关闭标记之后添加换行符来输出结构良好的文件:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<title>title3</title>
<desc>This is some desc3</desc>
</item>
</items>
答案 0 :(得分:7)
SimpleXML 扩展名仅限于格式化输出,它的姐妹扩展名DOMDocument支持输出格式。您的示例中的XML字符串,并使用DOMDocument::$preserveWhiteSpace
和DOMDocument::$formatOutput
来控制格式设置:
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
$doc->loadXML($string);
echo $doc->saveXML();
这将输出一个很好的缩进XML,其中包含您要求它们的换行符:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<title>title3</title>
<desc>This is some desc3</desc>
</item>
<empty/>
</items>
如果您还需要操作缩进,则可以使用相关问题和答案中概述的正则表达式: Converting indentation with preg_replace (no callback) 。
如果您不想使用该方法,您还可以从SimpleXML切换到其他方法,然后再切换到XMLWriter,它提供了一种设置打印XML缩进(XMLWriter::setIndent)的方法。您需要找到XML模型的临时表示,以便用XMLWriter
编写它,但这看起来并不那么简单。