Einzelnen Beitrag anzeigen
Alt 10.08.2007, 12:27  
Zergling-new
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard PHP/XML: SimpleXML

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.
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten