如何使用空白格式显示XML?

时间:2010-12-21 23:08:44

标签: php xml formatting simplexml whitespace

我有一个网页,可以根据应用更改的现有XML构建XML。我想在textarea中输出新的XML文件作为预览。它显示原始XML中存在的任何节点,其中包含原始XML很好的正确空格/格式(缩进和换行符),但任何新节点都显示在一行中没有缩进。例如:

<original parent node>
    <original child>value</original child>
</original parent node>
<original parent node>
    <new child>value</new child><new child>value</new child><new child>value</new child><new child>value</new child><new child>value</new child><new child>value</new child>
</original parent node>

以下是在XML中写入和读回的代码:

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = true;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
file_put_contents($file, $dom->saveXML());
echo "<textarea cols='100' rows='40'>".file_get_contents($file)."</textarea>";

我也在使用SimpleXML来操作XMLS。如何为新节点显示正确的whites间距?

3 个答案:

答案 0 :(得分:4)

我发现formatOutput仅在禁用preserveWhiteSpace时有效:

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml);
echo $dom->saveXML();

答案 1 :(得分:1)

添加它,它适用于我。

echo '<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>';
echo "<br/> <pre class=\"prettyprint\" >". htmlentities($dom->saveXML($dom->firstChild->firstChild->firstChild))."</pre>"; 

您可以删除$dom->firstChild->firstChild->firstChild以获取更多信息。

答案 2 :(得分:0)

尝试:

echo "<textarea cols='100' rows='40'>".htmlspecialchars($xml->asXML())."</textarea>";