Estoy intentando agregar algunos datos a un archivo XML existente usando SimpleXML de PHP. El problema es que agrega todos los datos en una sola línea:
<name>blah</name><class>blah</class><area>blah</area> ...
Y así. Todo en una sola línea. ¿Cómo introducir saltos de línea?
¿Cómo lo hago así?
<name>blah</name>
<class>blah</class>
<area>blah</area>
Estoy usando la asXML()
función.
Gracias.
php
formatting
simplexml
user61734
fuente
fuente
Respuestas:
Puede usar la clase DOMDocument para reformatear su código:
$dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXml->asXML()); echo $dom->saveXML();
fuente
La solución de Gumbo funciona. Puede trabajar con simpleXml arriba y luego agregar esto al final para hacer eco y / o guardarlo con formato.
El código a continuación lo hace eco y lo guarda en un archivo (vea los comentarios en el código y elimine lo que no desee):
//Format XML to save indented tree rather than one line $dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXml->asXML()); //Echo XML - remove this and following line if echo not desired echo $dom->saveXML(); //Save XML to file - remove this and following line if save not desired $dom->save('fileName.xml');
fuente
Úselo
dom_import_simplexml
para convertir a DomElement. Luego use su capacidad para formatear la salida.$dom = dom_import_simplexml($simple_xml)->ownerDocument; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; echo $dom->saveXML();
fuente
documentElement
debería serloownerDocument
. No estoy seguro si la API cambió o si esto es solo un error tipográfico. Lo he corregido ahora.Como respondieron Gumbo y Witman ; cargar y guardar un documento XML desde un archivo existente (somos muchos novatos por aquí) con DOMDocument :: load y DOMDocument :: save .
<?php $xmlFile = 'filename.xml'; if( !file_exists($xmlFile) ) die('Missing file: ' . $xmlFile); else { $dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dl = @$dom->load($xmlFile); // remove error control operator (@) to print any error message generated while loading. if ( !$dl ) die('Error while parsing the document: ' . $xmlFile); echo $dom->save($xmlFile); } ?>
fuente