Как я могу отобразить XML с форматированием пробелов? - PullRequest
1 голос
/ 22 декабря 2010

У меня есть веб-страница, которая создает XML из существующего XML с применением изменений. Я хочу вывести новый XML-файл в формате textarea в качестве предварительного просмотра. Он отображает любые узлы, которые присутствовали в исходном 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. Как я могу получить правильный пробел для отображения для новых узлов?

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Я обнаружил, что formatOutput работает только когда preserveWhiteSpace отключено:

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml);
echo $dom->saveXML();
1 голос
/ 28 марта 2017

Добавьте это, у меня это работает.

<code>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))."
";

Вы можете удалить $dom->firstChild->firstChild->firstChild для получения дополнительной информации.

0 голосов
/ 22 декабря 2010

Попробуйте:

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