php - recorrer - Formato de salida de $ SimpleXML-> asXML();
simplexmlelement php (3)
Encontré una solución similar ... para formatear datos xlm sin procesar ... a partir de mis solicitudes php SOAP
__getLastRequest & __getLastResponse
, para depurar rápidamente los xml''s que he combinado con google-code-prettify
.
Es una buena solución si desea formatear datos XML confidenciales y no desea hacerlo en línea.
Algunos ejemplos de códigos a continuación pueden ser útiles para otros:
$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>";
A continuación se muestra una muestra de la salida XML formateada que obtuve:
Nota: El formato de XML está disponible en $dom->saveXML()
y se puede guardar directamente en un archivo xml usando php file write.
Esta pregunta ya tiene una respuesta aquí:
El título lo dice todo.
Si tengo algo así como (de ejemplos de sitios 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();
Termino generando una cadena larga como esta:
<?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>
Esto está bien para un consumidor de programas, pero para tareas de depuración / tareas humanas, ¿alguien sabe cómo obtener esto en un buen formato sangrado?
Hay una variedad de soluciones en los comentarios en la página del manual de PHP para SimpleXMLElement . No muy eficiente, pero ciertamente escueto, es una solución de Anonymous
$dom = dom_import_simplexml($simpleXml)->ownerDocument;
$dom->formatOutput = true;
echo $dom->saveXML();
Los comentarios de la página del manual de PHP a menudo son buenas fuentes para las necesidades comunes, siempre y cuando primero filtre las cosas que están totalmente equivocadas.
Lo anterior no funcionó para mí, encontré esto funcionó:
$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();