Bearbeiten von XML-Dateien in PHP

Kürzlich ist bei mir der Bedarf entstanden, aus PHP heraus XML Dateien einzulesen und zu modifizieren. Im Wesentlichen geht es darum, vorhandene Werte zu ändern, Attribut inkl. Wert zu löschen oder neue Attribut/Wert-Kombinationen hinzuzufügen. Das geht mit Hilfe der PHP-Erweiterung SimpleXML denkbar einfach. SimpleXML wird, falls nicht manuell deaktiviert, mit PHP installiert.

Als Grundlage für die folgenden Absätze nutzen wir eine XML-Datei „00_example.xml“, die folgenden Aufbau hat und im Unterverzeichnis „xml“ liegt:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML Beispiel "xml/00_example.xml" -->
<root>
        <person></person>
        <name></name>
        <vorname></vorname>
        <zusatzinfo>
            <spitzname></spitzname>
            <spitzname></spitzname>
            <spitzname></spitzname>
        </zusatzinfo>
</root>

Es ist gegeben, dass sich die Sache mit den Spitznamen nicht anders lösen lässt, als mit multiplen Werten für das Attribut <spitzname>, abgelegt unter <zusatzinfo>. Nun möchte ich diese Beispieldatei mit Inhalt füllen und stelle dabei noch fest, dass für einen korrekten Eintrag meiner Testperson ein zusätzlicher Spitzname notwendig ist. Der folgende Code liest die Datei in PHP ein, setzt Werte für die XML-Elemente, fügt einen weiteren Spitznamen hinzu und speichert die Datei abschließend unter einem Neuen namen ab.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    // Datei mit SimpleXML einlesen
    $modXml = simplexml_load_file("xml/00_example.xml");
    // Wert für <person></person> setzen
    $modXml->person = 1;
    // Wert für <name></name> setzen
    $modXml->name = "Test";
    // Wert für <vorname></vorname> setzen
    $modXml->vorname = "Person";
    // Werte für <spitzname></spitzname> setzen
    $modXml->zusatzinfo->spitzname[0] = "T";
    $modXml->zusatzinfo->spitzname[1] = "Tes";
    $modXml->zusatzinfo->spitzname[2] = "TP";
    $modXml->zusatzinfo->Spitzname[3] = "T-Pez";
 
    // Datei abspeichern
    $modXml->asXML("xml/01_output.xml");
?>

Unser Freund „Test Person“ hat sich nun gemeldet und sich über seinen neuesten Spitznamen „T-Pez“ beschwert, also lesen wir die Datei mit seinen Angaben erneut ein und löschen den letzten Spitznamen. Wie im obigen Beispiel zu sehen ist, ist das erste Element mit „…spitzname[0]“ zu adressieren. Also muss „spitzname[3]“ gelöscht werden. Die Datei wird nun wieder gespeichert.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    // Datei mit SimpleXML einlesen
    $modXml = simplexml_load_file("xml/01_output.xml");
    // Anzahl von <spitzname> anzeigen
    $elementCount = $modXml->zusatzinfo->spitzname->count(); 
    echo "Die Person hat ".$elementCount." Spitznamen. "; // <-- Das Ergebnis ist: 4
    // Viertes Element <spitzname> löschen
    unset($modXml->zusatzinfo->spitzname[3]);
    $elementCount = $modXml->zusatzinfo->spitzname->count(); 
    echo "Die Person hat ".$elementCount." Spitznamen. "; // <-- Das Ergebnis ist: 3
    // Datei erneut speichern
    $modXml->asXML("xml/01_output.xml");
?>

Die neu gespeicherte Datei sieht nun wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML Datei "xml/01_output.xml" -->
<root>
        <person>1</person>
        <name>Test</name>
        <vorname>Person</vorname>
        <zusatzinfo>
            <spitzname>T</spitzname>
            <spitzname>Tes</spitzname>
            <spitzname>TP</spitzname>
        </zusatzinfo>
</root>

Genutzte Dokumentation: PHP: SimpleXML – Manual

 

mkriesten

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*