2010-12-19 12 views
1

Bassicly, was ich tun möchte, ist mit PHP Öffnen Sie eine XML-Datei und bearbeiten Sie es mit PHP jetzt dies kann ich mit Fopen() -Funktion. Noch mein Problem, dass ich Text an die Mitte des Dokuments anhängen möchte. Nehmen wir an, die XML-Datei hat 10 Zeilen und ich möchte etwas vor der letzten Zeile (10) anhängen, so dass es jetzt 11 Zeilen ist. Ist das möglich. DankSchreiben Sie eine Datei mit PHP

+0

http://php.net/manual/en/function.domnode-insert-before.php – seriousdev

Antwort

1

Je nachdem, wie groß die Datei ist, können Sie tun:

$lines = array(); 
$fp = fopen('file.xml','r'); 
while (!feof($fp)) 
    $lines[] = trim(fgets($fp)); 
fclose($fp); 

array_splice($lines, 9, 0, array('newline1','newline2',...)); 

$new_content = implode("\n", $lines); 

Dennoch werden Sie XML-Syntax danach erneut zu validieren müssen ...

+0

okay nach der 9 was ist die 0 für. Und wo hast du newline1 und newline2? – DonJuma

+0

Weitere Informationen finden Sie in der Dokumentation [array_splice()] (http://www.php.net/manual/en/function.array-splice.php). 9 ist die Position, an der neue Elemente eingefügt werden. 0 ist die Anzahl der Elemente nach Index 9, die Sie ersetzen möchten (in Ihrem Fall nehme ich an?), Denen ein Ersatzarray folgt. –

+0

Okay, das sieht gut aus, aber es sieht so aus, als ob Sie $ fp geschlossen haben. Speichert dies den neuen Text? – DonJuma

1

Wenn Sie in der Lage sein wollen eine Datei aus der Mitte, verwenden Sie den c+ offenen Modus ändern:

$fp = fopen('test.txt', 'c+'); 

for ($i=0;$i<5;$i++) { 
    fgets($fp); 
} 

fwrite($fp, "foo\n"); 
fclose($fp); 

oben Das wird „foo“ in der fünften Zeile schreiben, ohne die Datei vollständig lesen zu müssen.

Wenn Sie jedoch ein XML-Dokument zu modifizieren, ist es wahrscheinlich besser, einen DOM-Parser zu verwenden:

$dom = new DOMDocument; 
$dom->load('myfile.xml'); 

$linenum = 5; 
$newNode = $dom->createElement('hello', 'world'); 

$element = $dom->firstChild->firstChild; // skips the root node 
while ($element) { 
    if ($element->getLineNo() == $linenum) { 
     $element->parentNode->insertBefore($newNode, $element); 
     break; 
    } 
    $element = $element->nextSibling; 
} 

echo $dom->saveXML(); 

Natürlich ist der obige Code ist abhängig von der tatsächlichen XML-Dokumentstruktur. Aber die $element->getLineNo() ist der Schlüssel hier.

Verwandte Themen