HTML/XML-Parsing in PHP: Das beste Tool für Ihre Aufgabe

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten
\n

Wie parse ich HTML/XML in PHP? Ein Vergleich, der Ihnen Stunden spart

\n

Mussten Sie schon einmal Daten von einer fremden Website extrahieren oder eine komplexe XML-Konfiguration analysieren? Wenn ja, wissen Sie, wie schnell „manuelles“ Parsen mit strpos() und explode() zum Albtraum wird. Ein Fehler in einem Tag – und der ganze Parser bricht zusammen. Die gute Nachricht: PHP bietet mehrere leistungsstarke und elegante Lösungen. Die schlechte: Es ist leicht, den Überblick zu verlieren, welche man wählen soll. In diesem Artikel stellen wir Ihnen alle wichtigen Ansätze zum Parsen von HTML und XML in PHP vor, vergleichen ihre Leistung und Benutzerfreundlichkeit, und Sie werden endlich verstehen, welches Werkzeug Sie in Ihr Arsenal aufnehmen sollten.

\n\n

Warum Sie kein eigenes Rad erfinden sollten?

\n

Der erste Impuls eines Anfängers ist es, einen eigenen Parser mit regulären Ausdrücken zu schreiben. Ja, für eine einmalige Aufgabe mit perfekt strukturiertem HTML kann das funktionieren. Aber sobald auf der Seite verschachtelte Tags, Kommentare oder, Gott bewahre, ungültiges HTML auftauchen (und das sind 90% der realen Fälle), scheitern reguläre Ausdrücke. Anstatt Zeit mit dem Debuggen Dutzender Patterns zu verschwenden, nutzen Sie fertige Bibliotheken. Sie haben all diese Probleme bereits für Sie gelöst.

\n\n

Ansatz Nr. 1: DOMDocument – die „schwere Artillerie“ für HTML

\n

DOMDocument ist eine integrierte PHP-Erweiterung, die einen vollständigen DOM-Baum des Dokuments erstellt. Seine Hauptstärke ist die Fähigkeit, mit fehlerhaftem HTML umzugehen. Sie übergeben ihm einfach einen String, und er versucht, ihn zu korrigieren. Ideal zum Parsen realer Webseiten.

\n

So sieht ein klassisches Beispiel aus: Alle Links aus HTML extrahieren.

\n
<?php\n$html = '<a href="https://pythonlib.ru">PythonLib</a>\n        <a href="https://php.net">PHP.net</a>';\n\n$dom = new DOMDocument();\n// Fehler beim Parsen von ungültigem HTML unterdrücken\nlibxml_use_internal_errors(true);\n$dom->loadHTML($html);\nlibxml_clear_errors();\n\n$xpath = new DOMXPath($dom);\n$links = $xpath->query('//a/@href');\n\nforeach ($links as $link) {\n    echo $link->nodeValue . "\\n";\n}\n?>
\n

Vorteile:

\n
    \n
  • Funktioniert mit jedem, auch fehlerhaftem HTML.
  • \n
  • Vollständige XPath-Unterstützung – ermöglicht komplexe Abfragen.
  • \n
  • In PHP integriert, keine Installation erforderlich.
  • \n
\n

Nachteile:

\n
    \n
  • Hoher Speicherverbrauch bei großen Dokumenten.
  • \n
  • Langsamer als Alternativen bei einfachen Aufgaben.
  • \n
  • Umständliche API für einfache Datenextraktion.
  • \n
\n\n

Ansatz Nr. 2: SimpleXML – Leichtigkeit und Eleganz für XML

\n

Wenn Sie mit garantiert gültigem XML arbeiten (RSS-Feeds, API-Antworten, Konfigurationen), ist SimpleXML Ihr bester Freund. Es verwandelt XML in ein Objekt, dessen Elemente Sie wie Eigenschaften und dessen Attribute Sie wie Array-Elemente ansprechen können.

\n

Beispiel für das Parsen eines RSS-Feeds:

\n
<?php\n$xml = '<rss>\n    <channel>\n        <item>\n            <title>Neuigkeit 1</title>\n            <link>https://example.com/1</link>\n        </item>\n        <item>\n            <title>Neuigkeit 2</title>\n            <link>https://example.com/2</link>\n        </item>\n    </channel>\n</rss>';\n\n$feed = simplexml_load_string($xml);\n\nforeach ($feed->channel->item as $item) {\n    echo $item->title . ': ' . $item->link . "\\n";\n}\n?>
\n

Vorteile:

\n
    \n
  • Unglaublich einfache und intuitive Syntax.
  • \n
  • Minimaler Speicherverbrauch.
  • \n
  • Hervorragend geeignet zum Lesen von Konfigurationsdateien.
  • \n
\n

Nachteile:

\n
    \n
  • Kann nicht mit ungültigem HTML umgehen.
  • \n
  • Schwierig, Knoten hinzuzufügen/zu ändern.
  • \n
  • Keine XPath-Unterstützung (obwohl es SimpleXMLE gibt).
  • \n
\n

Blogs

Buchempfehlungen