Format de sortie de $SimpleXML - > asXML (); [dupliquer]

cette question a déjà une réponse ici:

  • PHP simpleXML comment sauvegarder le fichier d'une manière formatée? 4 réponses

Le titre dit à peu près tout.

si j'ai quelque chose comme (des exemples de site 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();

Je finis par produire une longue chaîne comme ça:

<?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 très bien pour un consommateur de programme, mais pour le débogage/tâches humaines, quelqu'un sait-il comment obtenir ce dans un format dentelé agréable?

35
demandé sur Kodos Johnson 2009-07-28 03:18:33

3 réponses

il y a une variété de solutions dans les commentaires sur la page de manuel de PHP pour SimpleXMLElement . Pas très efficace, mais certainement terne, est une solution par 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, à condition que vous filtriez les choses manifestement mauvaises d'abord.

69
répondu Adam Wright 2011-11-13 16:52:27

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

$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
42
répondu Bidders 2013-04-29 15:19:02

a trouvé une solution similaire...pour formater les données brutes xlm..de mes demandes php SOAP __getLastRequest & __getLastResponse , pour déboguer rapidement les xml Je l'ai combiné avec google-code-prettify .

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

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

ci-Dessous est un échantillon de la Sortie XML formatée que j'ai eu:

Note: le XML formaté est disponible dans $dom->saveXML() et peut être directement sauvegardé dans un fichier xml en utilisant php file write.

Formatted XML Output

6
répondu naxrohan 2015-10-07 07:29:20