Daten via PHP in bestehendes XML-File schreiben

scheibenwischer

Grünschnabel
Grüß Euch! ;)
Wie der Betreff schon sagt, möchte ich mittels PHP Daten in ein XML-File hineinschreiben.
Um mein Anliegen nachvollziehbar zu machen, hab ich unten mein XML-File hineingetippt.
Ich möchte nun ein PHP-Skript erstellen, welches es ermöglicht, in diesem Baum zusätzliche <file>-Einträge mit allen Unterpunkten einzufügen, was natürlich an der richtigen Stelle geschehen muß. Hab schon ewig lange herumgesucht, aber eine für mich verständliche Erklärung hab ich leider nicht gefunden. Hab schon ein paar SAX-Tutorials durchgemacht, aber so etwas war in keinem davon abgedeckt. Mit dieser Pear::tree-Funktion hab ich es auch nicht auf die Reihe gekriegt und mit DOM kann ich nix anfangen, weil mein Provider das scheinbar nicht unterstützt. :-(

Meine Frage: Bin ich bei meinen Recherchen nach einem Parser auf einem komplett falschen Dampfer? Gibt es irgendwelche kinderleichten Möglichkeiten, mein Problem zu lösen und ich schnall's einfach nicht? Kann doch nicht so schwer sein, oder? :rolleyes:

Wäre Euch sehr verbunden, wenn ihr mir den einen oder anderen Anhaltspunkt geben könntet! Danke schon mal! :)


Code:
<?xml version="1.0" encoding="UTF-8"?>
<filemanagement>
	<folder foldername="SW">
		<caption>Strukturwissenschaften</caption>
		<file id="0" filename="test.xls">
			<fileinfo>
				<author>Hugo Habicht</author>
				<caption>Das ist nur ein Testfile</caption>
				<date>10.04.2004</date>
				<rating>5.0</rating>
				<path>./irgendwo</path>
			</fileinfo>
		</file>
		
		<file id="1" filename="telefonbuch.pdf">
			<fileinfo>
				<author>Donald Duck</author>
				<caption>Telefonbuch</caption>
				<date>10.04.2004</date>
				<rating>5.0</rating>
				<path>./irgendwoanders</path>
			</fileinfo>
		</file>
	</folder>
</filemanagement>
 
Hallo....


du könntest dir die Datei per fread() auslesen und dann per RegExp die richtigen stellen suchen,
wo du einfügen willst... das sieht auf den ersten Blick recht unkompliziert aus.

z.B.könntest du mit
PHP:
$strXmlFile=preg_replace(/(<\/file>)\s*(<\/folder)/siU,"\\1 $strFileItem \\2",$strXmlFile);

... ein neues <file>-item am Ende von <folder>einhängen.
Oder analog dazu mit
PHP:
$strXmlFile=preg_replace(/(<\/folder>)\s*(<\/filemanagement)/siU,"\\1 $strFolderItem \\2",$strXmlFile);
...ein neues <folder>-item.

Danach schreibst du dann per fputs() den neuen String in die Datei zurück...fertig.

Auch das Ändern bestehender Einträge sollte per RegExp nicht sonderlich schwer sein.....
 
Puh...da blick ich auf Anhieb jetzt nicht durch (Anfänger und so...), aber ich werd mal versuchen da durchzuackern. Plausibel klingt es ja irgendwie...:-)

Danke jedenfalls! ;)
 
Hm...ok...hab versucht, das nach deinem Code zu lösen und ihn einfach mal 1:1 in ein Script verpackt.

Da bekomm ich aber leider nur folgende Fehlermeldung:
Parse error: parse error, expecting `')'' in /Library/WebServer/Documents/MockUp/scripts/edit.php on line 5

Hab dann versucht, das mit Hilfe des Manuals zu verbessern, mit dem Ergebnis, daß er nun das FIle öffnet und den kompletten Inhalt löscht.

Kannst Du mir vielleicht einen Tipp geben, wie ich deine Codezeile irgendwie zum Laufen bringen kann? Der Ansatz scheint mir nachvollziehbar, aber die Definition der Pattern duchschau ich nicht ganz...
 
Den Code hat da Board etwas zerstümmelt, indem es ein paar Backslashes verschluckt hat... daraus resultiert vielleicht der Parse-Error:-)

Die Pattern ist recht simpel....

  • Suche einen schliessenden </file>-Tag, gefolgt von einen Paar Leerzeichen und einem schliessenden </folder>-Tag.
  • Ersetze in der Fundstelle die Leerzeichen zwischen diesen beiden Tags durch das zusätzliche <file>.

Ich hab mal nen Bsp. fertiggemacht.... ich hängs hier ran, damit das Board nicht wieder dazwischenfunkt;)
 

Anhänge

Zurück