Erfahren Sie mehr über die mit PHP Version 5 gebündelte SimpleXML-Erweiterung, die es PHP-Seiten ermöglicht, XML in PHP-freundlicher Syntax abzufragen, zu durchsuchen, zu ändern und erneut zu veröffentlichen.
PHP Version 5 führt SimpleXML ein, eine neue Anwendungsprogrammierschnittstelle (API) zum Lesen und Schreiben von XML. In SimpleXML der folgende Ausdruck:
$doc->rss->channel->item->title
Wählen Sie Elemente aus dem Dokument aus. Dieser Ausdruck ist einfach zu schreiben, solange Sie mit der Struktur des Dokuments vertraut sind. Wenn jedoch nicht klar ist, wo die erforderlichen Elemente erscheinen (z. B. in Docbooks, HTML und ähnlichen narrativen Dokumenten), kann SimpleXML XPath-Ausdrücke verwenden, um diese Elemente zu finden.
Erste Schritte mit SimpleXML
Angenommen, Sie benötigen eine PHP-Seite, um einen RSS-Feed in HTML zu konvertieren. RSS ist ein einfaches XML-Format zum Veröffentlichen verlinkter Inhalte. Das Stammelement des Dokuments ist RSS, das ein Kanalelement enthält. Das Kanalelement enthält Metadaten zum Feed, z. B. Titel, Sprache und URL. Es enthält auch verschiedene Berichte, die im Element Element gekapselt sind. Jedes Element verfügt über ein Linkelement, das eine URL und einen Titel oder eine Beschreibung (normalerweise beides) enthält, die einfachen Text enthält. Es werden keine Namensräume verwendet. Sicherlich hat RSS noch mehr zu bieten, aber das reicht für diesen Artikel. Listing 1 zeigt ein typisches Beispiel, das zwei Nachrichten enthält.
Listing 1. RSS-Feed
<?xml version="1.0"kodierung="UTF-8"?>
<rss version="0.92">
<Kanal>
<title>Mokka mit Schlag</title>
<link>http://www.elharo.com/blog</link>
<Sprache>de</Sprache>
<Artikel>
<title>Penn Station: Vorbei, aber nicht vergessen</title>
<Beschreibung>
Die alte Penn Station in New York wurde vor meiner Geburt abgerissen.
Wenn man sich diese Bilder ansieht, fühlt es sich wie ein Fehler an. Die aktuelle Seite ist es
funktionell, aber nicht mehr; eigentlich nur ein paar Bürotürme und eine U-Bahn
Korridore ohne besonderes Interesse oder Schönheit. Der neue Madison Square ...
</description>
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
</item>
<Artikel>
<title>Persönlich für Elliotte Harold</title>
<description>Manche Leute verwenden sehr anstößige Spam-Filter, die Sie benötigen
um eine zufällige Zeichenfolge in Ihren Betreff einzugeben, z. B. E37T, um durchzukommen.
Unnötig zu erwähnen, dass weder ich noch die meisten anderen Menschen sich die Mühe machen, mit ihnen zu kommunizieren
Diese Paranoiden reagieren völlig übertrieben auf das Spam-Problem.
Persönlich werde ich nicht...</description>
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
</item>
</channel>
</rss>
Lassen Sie uns eine PHP-Seite entwickeln, um einen RSS-Feed in HTML zu formatieren. Listing 2 zeigt den Grundaufbau dieser Seite.
Listing 2. Statische Struktur des PHP-Codes
<?php // XML-Dokument laden und analysieren ?>
<html xml:lang="de" lang="de">
<Kopf>
<title><?php // Der Titel wird aus dem RSS gelesen ?></title>
</head>
<body>
<h1><?php // Der Titel wird erneut aus dem RSS gelesen ?></h1>
<?php
// Hier fügen wir eine Schleife ein, um den Titel und die Beschreibung jedes Elements einzuschließen
?>
</body>
</html>
Ein XML-Dokument analysieren
Der erste Schritt besteht darin, das XML-Dokument zu analysieren und in einer Variablen zu speichern. Es ist lediglich eine Codezeile erforderlich, in der eine URL an die Funktion simplexml_load_file() übergeben wird:
$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
Für dieses Beispiel habe ich die Seite aus dem New York Times-Feed von Userland gefüllt (unter http://partners.userland.com/nytRss/nytHomepage.xml ). Natürlich kann auch jede beliebige URL zu einem anderen RSS-Feed verwendet werden.
Beachten Sie, dass diese Funktion, obwohl der Name simplexml_load_file() lautet, tatsächlich ein XML-Dokument auf einer Remote-HTTP-URL analysiert. Aber das ist nicht das einzig Seltsame an dieser Funktion. Der Rückgabewert (hier in der Variablen $rss gespeichert) verweist nicht auf das gesamte Dokument, wie Sie vielleicht erwarten würden, wenn Sie andere APIs wie das Document Object Model (DOM) verwendet haben. Stattdessen zeigt es auf das Stammelement des Dokuments. Der Inhalt des Dokumentprologs und Epilogs ist über SimpleXML nicht zugänglich.
Suchen Sie den Feed-Titel.
Der Titel des gesamten Feeds (nicht die Titel der einzelnen Geschichten im Feed) befindet sich im untergeordneten Titel des RSS-Stammelementkanals. Es ist einfach, den Titel zu finden, als ob das XML-Dokument eine serialisierte Form eines Objekts der Klasse RSS wäre, wobei das Kanalfeld selbst ein Titelfeld hätte. Unter Verwendung der regulären PHP-Objektreferenzsyntax lautet die Anweisung zum Suchen des Titels wie folgt:
$title = $rss->channel->title;
Sobald es gefunden wurde, kann es dem Ausgabe-HTML hinzugefügt werden. Das geht ganz einfach, geben Sie einfach die Variable $title zurück:
<title><?php echo $title ?></title>
Diese Zeile gibt den String-Wert des Elements und nicht des gesamten Elements aus. Das heißt, der Textinhalt wird geschrieben, aber die Tags werden nicht eingebunden.
Sie können die Zwischenvariable $title sogar komplett überspringen:
<title><?php echo $rss->channel->title ?></title>
Da die Seite diesen Wert an mehreren Stellen wiederverwendet, finde ich es bequemer, ihn in einer Variablen mit klarer Bedeutung zu speichern.
…