Подтвердить что ты не робот

Вывод формата $SimpleXML-> asXML();

Возможный дубликат:
PHP simpleXML как сохранить файл в отформатированном виде?

Edit Да, это дубликат. Проголосовал за закрытие. - Эли

Привет всем,

Название в значительной степени говорит обо всем этом.

Если у меня есть что-то вроде (из примеров сайта php):

 $xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies></movies>
XML;

$sxe = new SimpleXMLElement($xmlstr);

$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character  = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');


echo("<pre>".htmlspecialchars($sxe->asXML())."</pre>");

die();

В конечном итоге вывод длинной строки выглядит так:

<?xml version="1.0" standalone="yes"?>
<movies type="documentary"><movie><title>PHP2: More Parser Stories</title><plot>This is all about the people who make it work.</plot><characters><character><name>Mr. Parser</name><actor>John Doe</actor></character></characters><rating type="stars">5</rating></movie></movies>

Это нормально для потребителя программы, но для отладки/человеческих задач кто-нибудь знает, как получить это в хороший отступом формат?

4b9b3361

Ответ 1

В комментариях к странице руководства PHP для SimpleXMLElement существует множество решений. Не очень эффективным, но, безусловно, кратким, является решение анонимного

$dom = dom_import_simplexml($simpleXml)->ownerDocument;
$dom->formatOutput = true;
echo $dom->saveXML();

Комментарии к странице руководства PHP часто являются хорошими источниками общих потребностей, если вы сначала отфильтровываете явно неправильные вещи.

Ответ 2

Выше не работало для меня, я нашел, что это сработало:

$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();

Ответ 3

Нашел аналогичное решение... для форматирования необработанных данных xlm... из моих php SOAP запросов __getLastRequest & __getLastResponse, для быстрой отладки xml я объединил его с google-code-prettify.

Это хорошее решение, если вы хотите отформатировать чувствительные XML-данные и не хотите делать это онлайн.

Пример кода ниже, может быть полезен другим:

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($data); //=====$data has the raw xml data...you want to format

echo '<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>';

echo "<br/> <pre class=\"prettyprint\" >". htmlentities($dom->saveXML())."</pre>";

Ниже приведен образец форматированного XML-вывода, который я получил:

Примечание. Отформатированный XML доступен в $dom->saveXML() и может быть непосредственно сохранен в XML файле, используя запись в файле php.

Отформатированный XML-вывод