Zeilenumbruch in xml-Datei
Klaus
- php
0 Sven Rautenberg0 Klaus
0 Markus**0 Klaus
Tach!
Ich lese mir eine xml Datei ein und möchte die ersten beiden Zeilen verändern:
$array = file($downloadFile);
$a = '?';
array_splice($array, 0, 2);
array_unshift($array, '<?xml version="1.0" encoding="utf-8" '.$a.'>\n', '<?xml-stylesheet type="text/xsl" href="test.xslt" '.$a.'>\n');
$string = implode($array);
file_put_contents($downloadFile, $string);
Mein Problem ist, dass die Zeilen auch wirklich als neue Zeilen in der xml-Datei abgelegt werden sollen und nicht in einer Zeile stehen sollen (weil ich später wieder die ersten beiden Zeilen ersetzen will).
Wie mach ich das?
Klaus
Moin!
Ich lese mir eine xml Datei ein und möchte die ersten beiden Zeilen verändern:
Dann mach das doch einfach.
$array = file($downloadFile);
Hast du mal nachgelesen, was die Funktion file() tut? Zitat aus der Doku:
"Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird. Jedes Feld des Arrays korrespondiert mit einer Zeile der Datei. Der Zeilenumbruch bleibt erhalten."
Und jetzt die Frage: Wo stehen die ersten beiden Zeilen im Array?
$a = '?';
Wozu das $a?
array_splice($array, 0, 2);
Unnötig.
array_unshift($array, '<?xml version="1.0" encoding="utf-8" '.$a.'>\n', '<?xml-stylesheet type="text/xsl" href="test.xslt" '.$a.'>\n');
array_unshift() unnötig. $a unnötig. '\n' ist kein Zeilenumbruch. "\n" wäre einer.
$string = implode($array);
file_put_contents($downloadFile, $string);
Ok, was das Schreiben angeht. Locking fehlt insgesamt. Wird bei Multi-Tasking- oder Multi-User-Zugriff zum echten Problem - im Web-Kontext also im Prinzip immer.
- Sven Rautenberg
Dann mach das doch einfach.
$array = file($downloadFile);
Hast du mal nachgelesen, was die Funktion file() tut? Zitat aus der Doku:
"Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird. Jedes Feld des Arrays korrespondiert mit einer Zeile der Datei. Der Zeilenumbruch bleibt erhalten."
Durch das löschen der ersten beiden Zeilen und das anschließende neuschreiben wurden die Zeilen nicht übernommen.
Wozu das $a?
Relikt
Unnötig.
stimmt
array_unshift() unnötig. $a unnötig. '\n' ist kein Zeilenumbruch. "\n" wäre einer.
das war's! Danke!
Ok, was das Schreiben angeht. Locking fehlt insgesamt. Wird bei Multi-Tasking- oder Multi-User-Zugriff zum echten Problem - im Web-Kontext also im Prinzip immer.
das $downloadFile beinhaltet eine userID
Moin!
$array = file($downloadFile);
Hast du mal nachgelesen, was die Funktion file() tut? Zitat aus der Doku:
"Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird. Jedes Feld des Arrays korrespondiert mit einer Zeile der Datei. Der Zeilenumbruch bleibt erhalten."Durch das löschen der ersten beiden Zeilen und das anschließende neuschreiben wurden die Zeilen nicht übernommen.
Naja, die erste Zeile steht in $array[0], und die zweite in $array[1]. Darauf wollte ich hinaus.
Wozu das $a?
Relikt
Also löschen.
Ok, was das Schreiben angeht. Locking fehlt insgesamt. Wird bei Multi-Tasking- oder Multi-User-Zugriff zum echten Problem - im Web-Kontext also im Prinzip immer.
das $downloadFile beinhaltet eine userID
Ja und?
- Sven Rautenberg
Tach!
TACH!
Mein Problem ist, dass die Zeilen auch wirklich als neue Zeilen in der xml-Datei abgelegt werden sollen und nicht in einer Zeile stehen sollen (weil ich später wieder die ersten beiden Zeilen ersetzen will).
Wie mach ich das?
Ich bin mir grade nicht sicher, weil ich kein Fan von PHP bin und möchte auch nicht Deinen Programmierstil beanstanden, aber ich gehe mal davon aus, dass PHP elegantere Methoden zur DOM Verarbeitung eines XML-Baumes verfügt...
Google bringt mir folgende Ergebnisse.
Gruß, Markus**
Ich bin mir grade nicht sicher, weil ich kein Fan von PHP bin und möchte auch nicht Deinen Programmierstil beanstanden, aber ich gehe mal davon aus, dass PHP elegantere Methoden zur DOM Verarbeitung eines XML-Baumes verfügt...
Die Methoden von PHP (z.B. DOM) greifen erst ab dem ersten root-tag. Alles was davor kommt erwischt man so nicht.