SimpleXML :: addChild()在输出到xml时无法添加换行符

时间:2010-09-26 09:57:24

标签: php simplexml

<?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>

1 个答案:

答案 0 :(得分:7)

SimpleXML 扩展名仅限于格式化输出,它的姐妹扩展名DOMDocument支持输出格式。您的示例中的XML字符串,并使用DOMDocument::$preserveWhiteSpaceDOMDocument::$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编写它,但这看起来并不那么简单。

相关问题