Abgekoppelt von diesem Fred
http://www.phpfriend.de/forum/ftopic62518.html
möchte ich mit diesem Beispiel zeigen, wie einfach mit PHP 5 und SimpleXML XML-Dateien gelesen oder geschrieben werden können.
Geschrieben wird ein beliebiger Text in <section> Tags, die über das name-Attribut identifiziert werden. Bei Zeichensatzfehlern einfach mal versuchen konsequent UTF-8 zu verwenden, oder eben wieder auf good-old ISO-8859-1 zurückstellen.
test.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<text></text>
test.php
PHP-Code:
<?php
$file = "test.xml";
$xml = simplexml_load_file($file);
// schreibzugriff wenn angefordert und ein section-name angegeben wurde
if (@$_POST["access"] == "write" && strlen(@$_POST["name"]) > 0) {
// section erstellen und wert zuweisen
$section = $xml->addChild("section", @$_POST["value"]);
// attribut name festlegen, wir wollen den tag ja später wiedererkennen
$section->addAttribute("name", $_POST["name"]);
// xml in die datei schreiben
file_put_contents($file, $xml->asXml());
// damit wir es auch gleich wieder auslesen können, ob es geklappt
// hat, die datei gleich nach dem schreiben wieder laden
$xml = simplexml_load_file($file);
}
// lesezugriff auf alle section's'
for ($i = 0; $i < count($xml->section); ++$i) {
// attribute auslesen
$attr = $xml->section[$i]->attributes();
// ist der name der gesuchte?
if ($attr->name == @$_POST["name"]) {
// löschen dieses elements angefordert?
if (@$_POST["access"] == "delete") {
// element löschen
unset($xml->section[$i]);
// und neue struktur speichern
file_put_contents($file, $xml->asXml());
} else {
// nicht löschen? dann wohl nur lesen
$value = $xml->section[$i][0];
}
// aus der schleife aussteigen
break;
}
}
?>
<html><head><title></title></head><body>
<form action="" method="post">
Section <input name="name" type="text" value="<?=@$_POST["name"]?>" />
<input checked name="access" type="radio" value="read" /> lesen
<input name="access" type="radio" value="write" /> schreiben
<input name="access" type="radio" value="delete" /> löschen
<input type="submit" />
<textarea name="value"><?=@$value?></textarea>
</form>
</body></html>
Fehlerbehandlung und eine Einbettung in CDATA (leider manuell, da von SimpleXML nicht unterstützt) werden folgen. Wer den Part übernehmen möchte, darf sich angesprochen fühlen, das anstatt mir zu tun.