How can I display XML with whitespace formatting?

折月煮酒 提交于 2019-12-02 10:56:09

问题


I have a web page that builds an XML from an existing XML applying changes. I want to output the new XML file in a textarea as a preview. It displays any nodes that were present in the original XML with the proper whitespaces/formatting (indents and linebreaks) that the original XML had just fine, but any new nodes are all displayed on one line with no indents. Example:

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

Here is the code that writes and reads back in the 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>";

I'm also using SimpleXML to manipulate the XMLS. How can I get the proper whitespacing to display for the new nodes?


回答1:


I've found that formatOutput only works when preserveWhiteSpace is disabled:

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



回答2:


Add this, it works for me.

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>"; 

You can delete $dom->firstChild->firstChild->firstChild for more info.




回答3:


Try:

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


来源:https://stackoverflow.com/questions/4504811/how-can-i-display-xml-with-whitespace-formatting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!