PHP - Text aus datei loeschen

son gohan

Erfahrenes Mitglied
Hallo,

mit str_replace() kann man ja einzelne Woerter aus einer Datei loeschen.

Ich will aber ein mit Elementen markierten Text loeschen welcher zwischen zwei selbst erstellten Tags steht, so wie bei HTML, so wie folgt sieht das bei mir aus:

<Auftrag1>
<Volumen1>1</volumen1>
<Anzahl1>1<Anzahl1>
<Richtung1>Seitwaerts</Richtung1>
</Auftrag1>

Ich will jetzt zum Beispiel diesen kompletten Auftrag der zwischen <Auftrag1> und </Auftrag1> steht loeschen, welche PHP Funktion muss ich dazu benutzen?
 
Hi,

das kannst du über Regular Expressions machen:

PHP:
$text = '
<Auftrag0>
<Volumen1>0</volumen1>
<Anzahl1>0<Anzahl1>
<Richtung1>a</Richtung1>
</Auftrag0>
<Auftrag1>
<Volumen1>1</volumen1>
<Anzahl1>1<Anzahl1>
<Richtung1>b</Richtung1>
</Auftrag1>
<Auftrag2>
<Volumen1>2</volumen1>
<Anzahl1>2<Anzahl1>
<Richtung1>c</Richtung1>
</Auftrag2>
';

$result = preg_replace('#<auftrag1>.*</auftrag1>#sim', '', $text);

var_dump($result);
/*
string(192) "<Auftrag0>
<Volumen1>0</volumen1>
<Anzahl1>0<Anzahl1>
<Richtung1>a</Richtung1>
</Auftrag0>

<Auftrag2>
<Volumen1>2</volumen1>
<Anzahl1>2<Anzahl1>
<Richtung1>c</Richtung1>
</Auftrag2>"
*/

Das XML sieht mich aber etwas komisch aus. So würde es für mich "richtiger" aussehen:

XML:
<Auftraege>
	<Auftrag>
		<Id>0</Id>
		<Volumen>0</Volumen>
		<Anzahl>0</Anzahl>
		<Richtung>a</Richtung>
	</Auftrag>
	<Auftrag>
		<Id>1</Id>
		<Volumen>1</Volumen>
		<Anzahl>1</Anzahl>
		<Richtung>b</Richtung>
	</Auftrag>
	<Auftrag>
		<Id>2</Id>
		<Volumen>2</Volumen>
		<Anzahl>2</Anzahl>
		<Richtung>c</Richtung>
	</Auftrag>
</Auftraege>

So könntest du das XML parsen (siehe zum Beispiel hier) und dann den Auftrag mit der Id X aus dem Tree löschen. Wäre besser wartbar und nicht so fehleranfällig wie das löschen per RegEx.

Grüße,
BK
 
Zuletzt bearbeitet von einem Moderator:
Danke, das funktioniert sehr gut.
Die Regulaeren Ausdruecke sehen richtig kompliziert aus, ich glaube das lernt man nicht so schnell wie das funktioniert.
 
PHP - Text an bestimmter Stelle in Datei schreiben

Hallo,

mit fwrite() kann man an den Anfang oder Ende einer Datei neuen Text rein schreiben, aber ich will an eine markierte Stelle in der Datei neuen Text schreiben.

Zum Beispiel sieht meine Datei jetzt so aus:

<Auftrag1>
<Text1></Text1>
</Auftrag1>

Und ich will jetzt direkt nach dem von mir erstellten Tag <Text1> neuen Text rein schreiben, wie kann man das den machen?
 
Hab mal die 2 Threads zusammengeführt. Geht ja um das gleiche.

Das sieht mir stark nach XML aus. Dann empfehle ich dir mit DOMDocument zu arbeiten

Ersetzen eines Blocks:
PHP:
$txt = <<<'TXT'
<Auftraege>
    <Auftrag>
        <Volumen>1</Volumen>
        <Anzahl>1</Anzahl>
        <Richtung>Seitwaerts</Richtung>
    </Auftrag>
    <Auftrag>
        <Volumen>2</Volumen>
        <Anzahl>14</Anzahl>
        <Richtung>Rueckwaerts</Richtung>
    </Auftrag>
</Auftraege>
TXT;

$dom = new DOMDocument();
$dom->loadXML($txt);

//Erster Auftrag auswählen
$oldNode = $dom->getElementsByTagName('Auftrag')->item(0);
//Ersatz erstellen
$newNode = $dom->createElement('Auftrag', 'Hallo Welt');
//und ersetzen
$oldNode->parentNode->replaceChild($newNode, $oldNode);

echo $dom->saveXML();

Und ein neuer Auftrag davor:
PHP:
//Erster Auftrag auswählen
$oldNode = $dom->getElementsByTagName('Auftrag')->item(0);
//Neuer Auftrag erstellen
$newNode = $dom->createElement('Auftrag', 'Ich bin ein neuer Auftrag');
//Und einfügen
$oldNode->parentNode->insertBefore($newNode, $oldNode);;

Ausgabe:
XML:
<Auftraege>
    <Auftrag>Ich bin ein neuer Auftrag</Auftrag>
    <Auftrag>Hallo Welt</Auftrag>
    <Auftrag>
        <Volumen>2</Volumen>
        <Anzahl>14</Anzahl>
        <Richtung>Rueckwaerts</Richtung>
    </Auftrag>
</Auftraege>
 
Zuletzt bearbeitet von einem Moderator:
Also wenn du mein Beispiel meinst, das ist PHP in Reinkultur. Kein Buchstabe davon ist Javascript.
Das DOMDocument in der PHP-Doku

Achja, so als Beispiel wenn du allen Auftrag-Tags ein Subtag namens id anfügen könntest
PHP:
$nodes = $dom->getElementsByTagName('Auftrag');
for($i=0; $i<$nodes->length; $i++){
    $oldNode = $nodes->item($i);
    $oldNode->insertBefore($dom->createElement('id', $i), $oldNode->firstChild);
}
 
Achso danke, ich lese mich dann etwas mehr in das Thema ein, ich dachte das ist Javascript gewesen weil ich die Syntax von PHP in der Form noch gar nicht kenne.
 
Hallo,

ich will jetzt aus einer Textdatei die gesammelten Daten auslesen.

Meine Daten stehen folgendermasen in der Textdatei:

<Auftrag5214>
<Volumen>1</Volumen>
<Anzahl>1</Anzahl>
<Richtung>Seitwaerts</Richtung>
</Auftrag5214>
<Auftrag65654>
<Volumen>2</Volumen>
<Anzahl>14</Anzahl>
<Richtung>Rueckwaerts</Richtung>
</Auftrag65654>

ich will jetzt in einer HTML Seite mit PHP diese Daten in eine Liste schreiben und das einzige was mir bis jetzt einfaellt ist folgendes:

PHP:
$content = file_gets_content($file);

ich weis also im Moment nur wie ich den Inhalt der Textdatei in die HTML Seite mit PHP importiere, aber ich weis noch nicht wie ich die einzelnen Werte auslesen soll.

Jeder Auftrag hat hier eine unterschiedliche Erkennungs Nummer und innerhalb von diesen Auftrag Tags stehen die einzelnen Daten in ihren definierten Tags und die will ich jetzt in die Seite schreiben.

Kann jemand mit ein Tipp geben mit welchen PHP Funktionen ich das hinbekomme?
 
Das Format ist doch XML, also suche dir einen XML-Parser für PHP.
Es gibt zwei integrierte: DOMDocument und Verwandet & SimpleXML.
 
Zurück