web-dev-qa-db-fra.com

Format de sortie de $ SimpleXML-> asXML ();

Le titre dit à peu près tout.

Si j'ai quelque chose comme (de PHP exemples de sites):

$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();

Je finis par produire une longue chaîne comme ceci:

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

C'est bien pour un consommateur de programme, mais pour le débogage/les tâches manuelles, quelqu'un sait-il comment mettre cela dans un format indenté Nice?

36
Eli

Il y a une variété de solutions dans les commentaires sur le page de manuel PHP pour SimpleXMLElement . Pas très efficace, mais certainement laconique, est une solution de Anonymous

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

Les commentaires de la page de manuel PHP sont souvent de bonnes sources pour les besoins communs, tant que vous filtrez d'abord les éléments manifestement incorrects.

72
Adam Wright

Ce qui précède n'a pas fonctionné pour moi, j'ai trouvé que cela fonctionnait:

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

J'ai trouvé une solution similaire ... pour formater les données xlm brutes ... à partir de mes demandes php SOAP__getLastRequest & __getLastResponse, pour un rapide débogage du xml je l'ai combiné avec google-code-prettify.

C'est une bonne solution si vous souhaitez formater des données xml sensibles et ne voulez pas le faire en ligne.

Certains exemples de code ci-dessous peuvent être utiles à d'autres:

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

Voici un exemple de la sortie XML formatée que j'ai obtenue:

Remarque: Le XML formaté est disponible dans $dom->saveXML() et peut être directement enregistré dans un fichier xml en utilisant l'écriture de fichier php.

Formatted XML Output

7
naxrohan