XML in PHP mit SimpleXML
September 2009
Folgende Funktionen sind so zusammengestellt, dass man auf einfache Weise einen Wert aus einer XML-Datei auslesen, verändern oder löschen kann. Hierbei wird auf die PHP-Extension SimpleXML zurückgegriffen.
Anhand Beispielen werden die einzelnen Funktionen erklärt. Die Anwendungen der Funktionen sollten selbsterklärend sein.
Zuerst die XML-Datei: datei.xml
Vor der Verwendung muss die Datei geöffnet werden.
Mit Hilfe der Funktion getXMLvalue() können Werte aus der Datei ausgelesen werden.
Mit changeXMLvalue() wird ein Wert geändert.
createXMLnode() ermöglicht es, einen neuen Knoten im XML-Dokument zu erstellen.
Mit Hilfe von getXMLvalue() und unset() kann ein Knoten gelöscht werden. Man beachte, dass mit getXMLvalue() auf das Elternelement des zu löschenden Knotens zugegriffen wird.
Um die obigen Bearbeitungen der Datei speichern, kommt die Funktion saveXMLfile() ins Spiel.
Nach der obigen Prozedur würde die datei.xml sinngemäss so aussehen:
Siehe auch:
Anhand Beispielen werden die einzelnen Funktionen erklärt. Die Anwendungen der Funktionen sollten selbsterklärend sein.
Zuerst die XML-Datei: datei.xml
<?xml version="1.0"?>
<liste>
<dino nummer="3">
<name>Velociraptor</name>
<ort>Asien</ort>
</dino>
<dino nummer="16">
<name>Triceratops</name>
<ort>Nordamerika</ort>
</dino>
</liste>Vor der Verwendung muss die Datei geöffnet werden.
<?php
# Datei öffnen
function openXMLfile($xmlfile){
if(!isset($GLOBALS['xmlObjects'][$xmlfile])){
$xmlobj = simplexml_load_file($xmlfile);
$GLOBALS['xmlObjects'][$xmlfile] = $xmlobj;
}
}
?><?php
openXMLfile('datei.xml');
?>Mit Hilfe der Funktion getXMLvalue() können Werte aus der Datei ausgelesen werden.
<?php
# Wert auslesen
function getXMLvalue($xmlfile, $xmlpath){
$xmlobj = $GLOBALS['xmlObjects'][$xmlfile]->xpath($xmlpath);
return ($xmlobj) ? $xmlobj[0] : false;
}
?><?php
echo getXMLvalue('datei.xml', '/liste/dino[@nummer="16"]/name');
# Ausgabe: Triceratops
?>Mit changeXMLvalue() wird ein Wert geändert.
<?php
# Wert ändern
function changeXMLvalue($xmlfile, $xmlpath, $xmlnode, $xmlvalue=''){
$xmlobj = $GLOBALS['xmlObjects'][$xmlfile]->xpath($xmlpath);
$xmlobj[0]->{$xmlnode} = htmlspecialchars($xmlvalue);
}
?><?php
changeXMLvalue('datei.xml', '/liste/dino[@nummer="3"]', 'ort', 'Mongolei');
?>createXMLnode() ermöglicht es, einen neuen Knoten im XML-Dokument zu erstellen.
<?php
# neuen Knoten hinzufügen
function createXMLnode($xmlfile, $xmlpath, $xmlnode, $attributes=array(), $text=''){
$xmlobj = $GLOBALS['xmlObjects'][$xmlfile]->xpath($xmlpath);
$xmlobj2 = $xmlobj[0]->addChild($xmlnode, htmlspecialchars($text));
foreach($attributes as $attr => $value)
$xmlobj2->addAttribute($attr, htmlspecialchars($value));
}
?><?php
createXMLnode('datei.xml', '/liste', 'dino', array('nummer'=>'21'));
createXMLnode('datei.xml', '/liste/dino[@nummer="21"]', 'name', array(), 'Tyrannosaurus');
createXMLnode('datei.xml', '/liste/dino[@nummer="21"]', 'ort', array(), 'Los Angeles');
?>Mit Hilfe von getXMLvalue() und unset() kann ein Knoten gelöscht werden. Man beachte, dass mit getXMLvalue() auf das Elternelement des zu löschenden Knotens zugegriffen wird.
<?php
$parent = getXMLvalue('datei.xml', '/liste/dino[@nummer="16"]');
unset($parent->ort);
?>Um ein Element mit einem bestimmten Attribut zu löschen, wird es ein bisschen komplizierter:<?php
$nodes = getXMLvalue('datei.xml', '/liste');
foreach($nodes as $node){
if((string)$node->attributes()->nummer=='16'){
unset($node[0]); # Knoten löschen, dessen Attribut "nummer" den Wert "16" hat
break;
}
}
?>Ein Attribut an sich kann man wie folgt löschen:<?php
$node = getXMLvalue('datei.xml', '/xpath/to/mynode');
unset($node->attributes()->myAttribute);
?>Um die obigen Bearbeitungen der Datei speichern, kommt die Funktion saveXMLfile() ins Spiel.
<?php
# XML-Datei speichern
function saveXMLfile($xmlfile){
if(!isset($GLOBALS['xmlObjects'][$xmlfile])){
trigger_error('Die Datei "'.$xmlfile.'" wurde nie geöffnet.');
return false;
}
$xmlFileValue = $GLOBALS['xmlObjects'][$xmlfile]->asXML();
file_put_contents($xmlfile, $xmlFileValue);
}
?><?php
saveXMLfile('datei.xml');
?>Nach der obigen Prozedur würde die datei.xml sinngemäss so aussehen:
<?xml version="1.0"?>
<liste>
<dino nummer="3">
<name>Velociraptor</name>
<ort>Mongolei</ort>
</dino>
<dino nummer="21">
<name>Tyrannosaurus</name>
<ort>Los Angeles</ort>
</dino>
</liste>Siehe auch:
Andere Einträge
- HTML-Highlighter
- Undercover-MSN-Bot aufdecken
- Dateien mit .htaccess gzip komprimieren
- Geschwindigkeit von PHP-Scripts optimieren
- XML-Datei durchsuchen
kenn mich mit xml leider überhaupt nicht aus desshalb frag ich mal nach was damit gemeint ist.
mfg Ben