2012-03-27 12 views
0

Ich habe eine Datei, die über HTTPS gesendet wird und ich handle mit einem PHP-Skript.müssen Wagenrücklauf nach jedem XML-Element (PHP)

Die Daten werden mit Hilfe akzeptiert:

$data = file_get_contents('php://input') 

in eine Datei geschrieben, wenn es als eine Zeile geschrieben wird.

Aufgrund unserer internen Systeme (IBM power 7) wurde mir von I.T gesagt, dass ich nach jedem xml-Element einen Wagenrücklauf hinzufügen muss.

So ist die Datei öffnet sich zur Zeit in einem Editor wie:

<root><element1><element2></element2></element1></root> 

ich es brauchen:

<root> 
<element1> 
<element2></element2> 
</element1> 
</root> 

Welche "\ n" nach jedem Schließen-Tag und ein Tag mit Kindern erfordert das Einfügen .

Irgendwelche Ideen?

+0

ich bin mir nicht sicher aber hast du '\ n' am Ende des Elements probiert ?? –

+0

Zeige mehr Code! – ajreal

+0

Klingt, als würde jemand anstelle eines echten Editors Ihre Dateien mit Notepad öffnen. –

Antwort

2

Die formatOutput Option wird es tun.

+0

Ich habe versucht: $ doc = new DOMDocument(); $ doc-> formatOutput = true; $ doc-> loadXML ($ data); $ doc-> speichern ("data/test.xml"); aber es speichert nur im selben Format ohne Rückgabe. – rsmarsha

+0

Set formatOutput nach dem Laden der Datei wie vorgeschlagen [hier] (http://stackoverflow.com/questions/768215/php-pretty-print-html-not-tidy). – ceving

+0

Versucht, dass auch und Notizblock es immer noch als einzelne Zeilen zeigt. :( – rsmarsha

2

Wenn es nur zum Einfügen von Zeilenumbrüchen ist, wird ein Regex gut funktionieren.

Jedoch nicht start parsing XML with Regular Expressions!

Versuchen Sie folgendes:

$xml = preg_replace(
     '=(<(.*?)>)(?![^<>]*</\2>|$)=s', 
     "\\1\n", 
     file_get_contents('php://input')); 

Der Ausdruck passt alle XML-Tags, die nicht gefolgt werden von EOF oder ein passender schließenden Tag mit einem negative lookahead assertion [(?!..)] und backreference.

+1

Regular Expression Hacks werden auf [CDATA] (http://en.wikipedia.org/wiki/CDATA) Teilen fehlschlagen. – ceving

+0

@ceving Sie haben Recht. Wenn CDATA innerhalb der Zeichenfolge des OPs vorhanden ist, fügt diese Regex möglicherweise Zeilenumbrüche dazwischen ein. Eine Ausnahme für CDATA könnte ebenfalls in die Regex eingearbeitet werden. Die richtige Lösung verwendet jedoch einen XML-DOM-Parser, wie es ceving nahe legt. – Kaii