XML-Datei hochladen und auslesen

Ein festdefiniertes XML-Dokument soll über eine kleine Webanwendung auf einen Server hochgeladen und via PHP ausgewertet werden. Im Anschluss sollen bestimmte Werte ausgegeben werden, die Datei selbst aber nicht auf dem Server gespeichert bleiben.

Zunächst einmal ist die Struktur des XML wichtig. Im Prinzip ist diese wie folgt aufgebaut:

<?xml version = "1.0" encoding = "iso-8859-1"?>
<protokoll>
    ...
</protokoll>
<nachricht>
    <absender>
        ...
    </absender>
    <zeitraum>
        <jahr>2012</jahr>
        <monat>01</monat>
    </zeitraum>
    <daten>
        <satz>
            <element name = "name1">
                <wert>ABC</wert>
            </element>
            <element name = "name2">
                <wert>123</wert>
            </element>
            ...
        </satz>
        <satz>
            <element name = "name1">
                <wert>XYZ</wert>
            </element>
            <element name = "name2">
                <wert>456</wert>
            </element>
            ...
        </satz>
        ...
    </daten>
</nachricht>

In einer PHP-Datei wird zunächst ein Formular zum Dateiupload bereit gestellt:

<form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="datei" /><br />
    <input type="hidden" name="sent" value="1" />
    <input type="submit" value="Datei hochladen und Auswertung starten" /><br />
</form>

Da mit diesem Formular die Datei hochgeladen wird, ist die enctype-Angabe im form-Tag notwendig.

Weiter gehts mit der Verarbeitung des Uploads. Dieser Teil erfolgt nur nach Absenden des Formulars und steht entsprechend in der Klammerung:

if(isset($_REQUEST["sent"])) {
    ...
}

Auf die Datei kann mittels der Superglobalen $_FILES zugegriffen werden. Zunächst soll geprüft werden, ob es sich um eine XML-Datei handelt. Wenn ja, soll die Datei auf dem Server im Verzeichnis verzeichnis als dateiname.xml abgelegt werden; dort wird sie später wieder entfernt:

if($_FILES['datei']['type'] == "text/xml")
    move_uploaded_file($_FILES['datei']['tmp_name'], "verzeichnis/dateiname.xml");
else {
    echo '<p>Die hochzuladene Datei muss dem XML-Format entsprechen!</p>';
}

Das Kopieren übernimmt der move_uploaded_file-Befehl. Natürlich sollte das Verzeichnis entsprechende Schreibrechte besitzen. Jetzt kann die Datei auch eingelesen werden.

Wie so oft, bietet hierfür PHP auch schon passende Bibliotheken an. Mittels simplexml_load_file wird die Datei in ein Array überführt und kann nun, wie folgt, verarbeitet werden:

$xml = simplexml_load_file("verzeichnis/dateiname.xml");
foreach ($xml->nachricht->daten->satz as $satz){
    foreach ($satz->element as $element){
        switch((string) $element['name']) {
            case 'name1':
                $temptest = $element->wert;
                break;
            case 'name2':
                $temptest =  $element->wert;
                break;
        }
    }
}

Die weitere Verarbeitung soll der eigenen Kreativität bzw. den persönlichen Anforderungen überlassen bleiben. Abschließend wird die Datei über

unlink($verz."/".$thefile);

wieder vom Server entfernt.

 

 

Schwerpunkt: , , , ,

Schreibe einen Kommentar

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