Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

XML Datei einlesen mit PHP

Sie befinden sich: Home > Php Tutorial > XML Datei einlesen mit PHP

XML Datei einlesen mit PHP


Eintrag am:  13.05.2011
Hits / Besucher:  30218
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

In diesem PHP-Tutorial erläutere ich Ihnen, wie Sie eine XML-Datei mithilfe von PHP einlesen können. Wir werden Schritt für Schritt vorgehen und dabei die notwendigen Details und Erklärungen liefern, um das Verständnis zu vertiefen.

Der typische Ablauf beim Einlesen einer XML-Datei mit PHP sieht so aus:

graph TD
    A["XML vorhanden?"] -->|Ja| B["Einlesen"]
    A -->|Nein| C["Fehlermeldung"]
    B --> D{"XML gültig?"}
    D -->|Ja| E["Daten auslesen"]
    D -->|Nein| F["Fehler behandeln"]
    E --> G["Ausgeben"]

Voraussetzungen

Bevor Sie beginnen, sollten Sie über folgende Komponenten verfügen:

  • PHP-Umgebung: Stellen Sie sicher, dass PHP korrekt auf Ihrem Server oder lokalen Rechner installiert ist.
  • Texteditor: Ein einfacher Texteditor wie Notepad++, Sublime Text oder VS Code eignet sich hervorragend zum Bearbeiten von PHP- und XML-Dateien.

Schritt 1: Erstellung der XML-Datei

Zunächst benötigen Sie die XML-Datei, die Sie einlesen möchten. In diesem Beispiel erstellen wir eine XML-Datei namens xml_datei.xml. Diese Datei wird im gleichen Verzeichnis wie Ihr PHP-Skript gespeichert.

Inhalt der XML-Datei

Öffnen Sie Ihren bevorzugten Texteditor und fügen Sie den folgenden Inhalt ein:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<verzeichnis>
<titel>Städteverzeichnis</titel>
<eintrag>
<stichwort>Erfurt</stichwort>
<eintragstext>Erfurt ist die Hauptstadt von Thüringen...</eintragstext>
</eintrag>
<eintrag>
<stichwort>Jena</stichwort>
<eintragstext>Jena ist bekannt für ihre Universitäten und Forschungseinrichtungen...</eintragstext>
</eintrag>
</verzeichnis>

Speichern der XML-Datei

Speichern Sie die Datei unter dem Namen xml_datei.xml im gleichen Verzeichnis wie Ihr PHP-Skript. Achten Sie darauf, dass der Dateiname exakt übereinstimmt, um Fehler beim Einlesen zu vermeiden.

Schritt 2: Erstellung des PHP-Skripts

Nun erstellen wir das PHP-Skript, das die XML-Datei einliest und die Daten verarbeitet. Das Skript kann beliebig benannt werden, beispielsweise einlesen_xml.php, solange es sich im selben Verzeichnis wie xml_datei.xml befindet.

PHP-Code Erklärung

Im Folgenden finden Sie den vollständigen PHP-Code mit ausführlichen Kommentaren:

<?php

header('Content-Type: text/html; charset=utf-8');

/**
* Definieren des Pfads zur XML-Datei inklusive Dateinamen
*/
$xml_datei = 'xml_datei.xml';

/**
* Überprüfen, ob die XML-Datei existiert
* Die @-Zeichen unterdrücken Fehlermeldungen, falls die Datei nicht gefunden wird
*/
if (file_exists($xml_datei) != false) {
/**
* Einlesen der XML-Datei mit der Funktion simplexml_load_file()
* Die geladene XML wird als Objekt in $xml_object gespeichert
*/
$xml_object = simplexml_load_file($xml_datei);

/**
* Überprüfen, ob das Element <eintrag> im XML-Objekt vorhanden ist
*/
if (is_object($xml_object->eintrag) == true) {
/**
* Durchlaufen der <eintrag>-Elemente mit einer foreach-Schleife
* Jede Iteration liefert den Schlüssel ($key) und den Wert ($value) des aktuellen Elements
*/
foreach ($xml_object->eintrag as $key => $value) {
/**
* Ausgabe des <stichwort>-Elements in Fettdruck
*/
echo '<b>' . $value->stichwort . '</b><br />';
/**
* Ausgabe des <eintragstext>-Elements
*/
echo $value->eintragstext . '<br />';
}
}
} else {
/**
* Beenden des Skripts mit einer Fehlermeldung, falls die XML-Datei nicht geöffnet werden kann
*/
exit('Konnte ' . $xml_datei . ' nicht öffnen.');
}
?>
 

Detaillierte Erläuterungen

  1. Header setzen:

    header('Content-Type: text/html; charset=utf-8');
    

    Dieser Header stellt sicher, dass der Inhalt als HTML mit UTF-8-Kodierung interpretiert wird, was wichtig für die korrekte Darstellung von Sonderzeichen ist.

  2. Pfad zur XML-Datei definieren:

    $xml_datei = 'xml_datei.xml';

    Hier wird die Variable $xml_datei mit dem Namen der XML-Datei initialisiert. Da sich die Datei im gleichen Verzeichnis wie das PHP-Skript befindet, reicht der Dateiname aus.

  3. Existenz der XML-Datei prüfen:

    if (file_exists($xml_datei) != false) {

    Die Funktion file_exists() überprüft, ob die angegebene Datei vorhanden ist. Das @-Zeichen unterdrückt etwaige Fehlermeldungen, die auftreten könnten, wenn die Datei nicht existiert.

  4. XML-Datei einlesen:

    $xml_object = simplexml_load_file($xml_datei);

    Die Funktion simplexml_load_file() lädt die XML-Datei und konvertiert sie in ein einfach zu bearbeitendes Objekt. Dies ermöglicht den direkten Zugriff auf die XML-Struktur und deren Elemente.

  5. Überprüfen, ob das <eintrag>-Element vorhanden ist:

    if (is_object($xml_object->eintrag) == true) {

    Diese Bedingung stellt sicher, dass das XML-Objekt das Element <eintrag> enthält und dass es sich um ein gültiges Objekt handelt.

  6. Durchlaufen der <eintrag>-Elemente mit foreach:

    foreach ($xml_object->eintrag as $key => $value) {

    Die foreach-Schleife iteriert über jedes <eintrag>-Element im XML. Dabei werden der Schlüssel ($key) und der Wert ($value) des aktuellen Elements ermittelt.

  7. Ausgabe der Daten:

    echo '<b>' . $value->stichwort . '</b><br />';
    
    echo $value->eintragstext . '<br />';

    Hier werden die Inhalte der <stichwort>- und <eintragstext>-Elemente formatiert und auf der Webseite angezeigt. <b> sorgt für Fettdruck, und <br /> fügt einen Zeilenumbruch hinzu.

  8. Fehlerbehandlung bei fehlender XML-Datei:

    else {
    
    exit('Konnte ' . $xml_datei . ' nicht öffnen.');
    }

    Falls die XML-Datei nicht gefunden oder nicht geöffnet werden kann, beendet die exit()-Funktion das Skript und gibt eine Fehlermeldung aus.

Schritt 3: Ausführung des PHP-Skripts

Nachdem Sie sowohl die XML-Datei als auch das PHP-Skript erstellt haben, können Sie das Skript ausführen, um die Daten der XML-Datei anzuzeigen.

Erwartete Ausgabe

Die Ausgabe des Skripts sollte wie folgt aussehen:

Erfurt
Erfurt ist die Hauptstadt von Thüringen...

Jena
Jena ist bekannt für ihre Universitäten und Forschungseinrichtungen...

Diese Ausgabe zeigt die Inhalte der <stichwort>- und <eintragstext>-Elemente aus der XML-Datei in einer übersichtlichen und lesbaren Form an.

Fehlerbehandlung bei XML-Dateien

In der Praxis kann eine XML-Datei fehlerhaft sein, zum Beispiel durch falsche Kodierung oder fehlende schließende Tags. Mit libxml_use_internal_errors(true) kannst du diese Fehler abfangen, ohne dass PHP eine Warnung auf dem Bildschirm ausgibt:

<?php

libxml_use_internal_errors(true);

$xml = simplexml_load_file('daten.xml');

if ($xml === false) {
echo 'XML konnte nicht geladen werden:';
foreach (libxml_get_errors() as $fehler) {
echo '<br>Zeile ' . $fehler->line
. ': ' . $fehler->message;
}
libxml_clear_errors();
exit;
}

/* XML ist gültig, weiterarbeiten */
echo 'XML erfolgreich geladen.';
?>

Dieser Ansatz gibt dir die volle Kontrolle über die Fehlerausgabe. Die Funktion libxml_get_errors() liefert ein Array mit detaillierten Informationen zu jedem einzelnen Fehler, inklusive Zeilennummer und Fehlerbeschreibung.

Gezielte Abfragen mit XPath

Statt alle Einträge per foreach zu durchlaufen, kannst du mit XPath gezielt einzelne Knoten abfragen. SimpleXML unterstützt XPath direkt über die Methode xpath():

<?php

$xml = simplexml_load_file('daten.xml');

/* Alle Einträge finden */
$alle = $xml->xpath('//eintrag');

/* Nur Einträge mit bestimmtem Stichwort */
$ergebnis = $xml->xpath(
'//eintrag[stichwort="Erfurt"]'
);

foreach ($ergebnis as $eintrag) {
echo $eintrag->beschreibung . '<br>';
}
?>

XPath verwendet eine pfadbasierte Syntax: // sucht im gesamten Dokument, eckige Klammern [] filtern nach Bedingungen und @ greift auf Attribute zu. Für komplexe XML-Strukturen ist XPath deutlich effizienter als verschachtelte Schleifen.

XML mit Attributen lesen

Reale XML-Dateien nutzen neben Elementen fast immer auch Attribute. So greifst du auf Attribute eines XML-Elements zu:

<?php

/* XML mit Attributen: */
/* <eintrag id="1" status="aktiv"> */

$xml = simplexml_load_file('daten.xml');

foreach ($xml->eintrag as $e) {
/* Attribut-Zugriff per Array-Syntax */
$id = (string) $e['id'];
$status = (string) $e['status'];

echo 'ID: ' . $id . ', Status: ' . $status;
}
?>

SimpleXML macht den Zugriff auf Attribute über die Array-Syntax möglich: $element['attributname']. Alternativ steht die Methode $element->attributes() zur Verfügung, die alle Attribute als Objekt liefert.

SimpleXML vs. DOMDocument vs. XMLReader

PHP bietet drei verschiedene Wege, XML-Daten zu verarbeiten. Jeder hat seine Stärken:

BibliothekEinsatzgebietSpeicherSchreiben
SimpleXMLKleine bis mittlere Dateien, LesenHoch (komplett im RAM)Eingeschränkt
DOMDocumentVolle Kontrolle, Lesen und SchreibenHochJa
XMLReaderSehr große Dateien (Streaming)NiedrigNein

Für die meisten Anwendungsfälle reicht SimpleXML völlig aus. Wenn du XML-Daten verändern und zurückschreiben musst, ist DOMDocument die bessere Wahl. Bei sehr großen Dateien (mehrere Hundert MB) solltest du XMLReader einsetzen, der die Datei als Stream verarbeitet und dadurch kaum Arbeitsspeicher braucht.

Häufige Fragen zum XML-Einlesen

Die folgenden Fragen tauchen bei der Arbeit mit XML in PHP regelmäßig auf.

Wie lese ich eine XML-Datei von einer URL?

simplexml_load_file() akzeptiert auch URLs, sofern allow_url_fopen in der php.ini aktiviert ist. Alternativ kannst du den XML-Inhalt per file_get_contents() laden und dann mit simplexml_load_string() parsen.

Wie schreibe ich XML zurück in eine Datei?

Mit $xml->asXML('datei.xml') speicherst du das geänderte XML-Objekt direkt in eine Datei. Ohne Parameter gibt asXML() den XML-String als Rückgabewert zurück.

Was mache ich bei Namespace-Fehlern?

Wenn deine XML-Datei Namespaces verwendet (wie bei RSS-Feeds oder SOAP), musst du diese registrieren: $xml->registerXPathNamespace('ns', '...');. Danach verwendest du den Präfix in XPath-Abfragen.

Grafik mit vier Bereichen, die die Funktionen des SimpleXML-Moduls in PHP darstellen: Manipulation von Elementen und Attributen (gelb), Intuitive Herangehensweise (grün), Objektorientiertes Design (hellgrün) und Effizientes Parsen (blau), dargestellt in einer rautenförmigen Anordnung um ein zentrales XML-Symbol.

Fazit

SimpleXML macht das Einlesen von XML-Dateien in PHP unkompliziert. Mit wenigen Zeilen Code lassen sich XML-Daten laden, per foreach durchlaufen und mit XPath gezielt abfragen. Achte dabei immer auf eine saubere Fehlerbehandlung mit libxml_use_internal_errors() und prüfe den Rückgabewert von simplexml_load_file(), bevor du mit den Daten arbeitest.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.