2009-12-03 30 views
5

He creado un archivo XML usando el XML simple de PHP, guardé el archivo. Al abrir el archivo en php usando fopen e imprimir los contenidos. mi XML tiene el siguiente aspecto: (ver más abajo)PHP SimpleXML nueva línea

<?xml version="1.0" encoding="UTF-8"?> 
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home> 

Quiero que el archivo XML mirando todas las nuevas líneas sangradas y sobre para cada elemento. ¿Alguien sabe cómo hacer esto?

Gracias

+0

¿cómo está guardando el archivo XML? –

Respuesta

10

Usted puede hacer esto mediante la propiedad de formatOutputDOMDocument.

Guarda tu XML como este lugar, suponiendo que el código XML está en una variable llamada $yourXML, y que desea guardarlo en un archivo en $xmlFilePath:

$dom = new DOMDocument(); 
$dom->loadXML($yourXML); 
$dom->formatOutput = true; 
$formattedXML = $dom->saveXML(); 

$fp = fopen($xmlFilePath,'w+'); 
fwrite($fp, $formattedXML); 
fclose($fp); 

Código adaptado de here.

+0

¡Oh bien! No tenía idea de que DOMDocument pudiera hacer esto ... – ChronoFish

+0

También puede importar la representación dom desde su objeto SimpleXML a un objeto DOMElement/DOMDocument y luego establecer la propiedad formatOutput en el objeto DOMDocument. De esta forma, no es necesario volver a analizar la cadena xml. ver y VolkerK

+1

El problema con 'formatOutput' es solo funcionará si no tiene ningún nodo de texto. IOW, si hay incluso un salto de línea entre dos nodos, no intentará embellecer la salida. –

2

Esto se llama "impresión bonita" y SimpleXML no hace eso. Si busca en Stack Overflow y en cualquier otro lugar de la web, encontrará soluciones personalizadas que lo hacen.

La impresión bonita es buena para la visualización pero No recomiendo guardar documentos en ese formato.

Si todavía está buscando un bonito-impresora, puede intentar SimpleDOM 's asPrettyXML()

include 'SimpleDOM.php'; 

$home = simpledom_load_string('<?xml version="1.0" encoding="UTF-8"?> 
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home>'); 

echo $home->asPrettyXML(); 
-3

echo "\ n"; para una nueva línea en xml

ob_start(); echo ' '. "\ n";?>