2009-12-03 20 views
5

Ho creato un file XML utilizzando il semplice XML di PHP, salvato il file. Quando apri il file in php usando fopen e stampando il contenuto. il mio XML assomiglia a questo: (vedi sotto)PHP SimpleXML nuova riga

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

voglio il file XML cercando tutte le nuove linee frastagliate e su per ogni elemento. Qualcuno sa come si fa questo?

Grazie

+0

come stai salvando il file XML? –

risposta

10

È possibile farlo utilizzando la proprietà formatOutput di DOMDocument.

Salva il tuo XML come questo, invece, presumendo che il tuo XML è in una variabile chiamata $yourXML, e si vuole salvarlo in un file alla $xmlFilePath:

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

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

Codice adattato da here.

+0

Oh, bello! Non avevo idea che DOMDocument potesse farlo ... – ChronoFish

+0

Puoi anche importare la rappresentazione dom dal tuo oggetto SimpleXML a un oggetto DOMElement/DOMDocument e impostare la proprietà formatOutput sull'oggetto DOMDocument. In questo modo non è necessario ri-analizzare la stringa xml. vedere e VolkerK

+1

Il problema con 'formatOutput' è Funzionerà solo se non hai alcun nodo di testo. IOW, se c'è anche un linebreak tra due nodi, non proverà a migliorare l'output. –

2

Si chiama "pretty printing" e SimpleXML non lo fa. Se cerchi su Stack Overflow e altrove sul Web troverai soluzioni personalizzate che lo fanno.

La stampa carina è buona per la visualizzazione ma Non è consigliabile salvare i documenti in tale formato.

Se siete ancora alla ricerca di un pretty-stampante, è possibile provare 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"; per la nuova riga in xml

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