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

mko*_*mko 5 php simplexml

<?xml version="1.0" encoding="utf-8"?><items>
<item><title>title3</title><desc>This is some desc3</desc></item></items>
Run Code Online (Sandbox Code Playgroud)

使用asXML()输出时,每个节点元素之间没有换行符?

如何通过在包含子元素节点的每个XML元素打开和关闭标记之后添加换行符来输出结构良好的文件:

<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<title>title3</title>
<desc>This is some desc3</desc>
</item>
</items>
Run Code Online (Sandbox Code Playgroud)

hal*_*dan 7

SimpleXML的扩展仅限于格式化输出,它的姊妹扩展,DOM文档具有格式化输出的支持.您的示例中的XML字符串,并使用DOMDocument::$preserveWhiteSpaceDOMDocument::$formatOutput控制formatttings:

$doc = new DOMDocument();

$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;

$doc->loadXML($string);

echo $doc->saveXML();
Run Code Online (Sandbox Code Playgroud)

这将输出一个很好的缩进XML,其中包含您要求它们的换行符:

<?xml version="1.0" encoding="utf-8"?>
<items>
  <item>
    <title>title3</title>
    <desc>This is some desc3</desc>
  </item>
  <empty/>
</items>
Run Code Online (Sandbox Code Playgroud)

如果您还需要操作缩进,则可以使用在相关问题和答案中概述的正则表达式:使用preg_replace转换缩进(无回调).

如果您不想使用该方法,您还可以从SimpleXML切换到其他方法,然后再切换到XMLWriter,它提供了一种方法来设置打印XML 的缩进(XMLWriter :: setIndent).您需要找到XML模型的临时表示来编写它,XMLWriter但这看起来并不那么简单.