selfhtml.de - Alles für den Webmaster!

 

RSS-Feeds erstellen: Parsen mit DOMXPath und Dokument bauen mit der DOM-Bibliothek

Parsen mit DOMXPath


Nach dem Validieren mit Tidy parsen wir das XHTML-Dokument mit der DOMXPath-Bibliothek. Gegenüber der DOM-Bibliothek bietet XPath [4] die bessere Syntax für den direkten Zugriff auf Elemente einer Webseite. So lassen sich Knoten nicht nur über ihr ID-Attribut sondern auch über andere Attribute selektieren. Hier Beispiel-Code für den Zugriff auf alle TD-Elemente innherhalb von TD-Elementen:



$doc = new DOMDocument();
$doc->loadHTML($tidy->html()->value);
$xp = new domxpath($doc);
$titles = $xp->query('//td//td');


Dokument bauen mit der DOM-Bibliothek



Die ausgegebene Datei muß valides XML sein. Um ein solches Dokumentes zu erstellen, benutzen wir die DOM-Bibliothek von PHP. Dies sichert, daß wir keinen schließenden Tag vergessen wie es beim manuellen Zusammensetzen eines Ausgabe-Strings häufig passiert. Hier der Code für die Initialisierung des DOM-Dokumentes:



$rssdom = new DOMDocument('1.0', 'iso-8859-1');
$rss = $rssdom->createElement("rss");
$rss->setAttribute("version","2.0");
$rssdom->appendChild($rss);
$channel = $rssdom->createElement("channel");
$rss->appendChild($channel);
$channel->appendChild($rssdom->createElement("title","www.selfhtml.de Magazin"));
$channel->appendChild($rssdom->createElement("link","http://www.selfhtml.de/magazin/"));
$channel->appendChild($rssdom->createElement("description","News Feed fuer das Magazin von www.selfhtml.de"));


Durch das Loopen über die mit dem obigen XPATH-Ausdruck erhaltenen Tabelleneinträge erhalten wir dann unser RSS-Dokument welches erneut aus Effizienzgründen gespeichert wird.



$date = "" ;
foreach ($titles as $node) {
$cnode->textContent . "\n";
if ($node->getElementsByTagName("a")->length > 0) {
$a = $node->getElementsByTagName("a");
$descr = getTeaser($a->item(0)->getAttribute("href"));
$item = $rssdom->createElement("item");
$channel->appendChild($item);
$item->appendChild($rssdom->createElement("title",$a->item(0)->textContent));
$item->appendChild($rssdom->createElement("description",$descr));
$item->appendChild($rssdom->createElement("pubDate",$date));
$item->appendChild($rssdom->createElement("link",$a->item(0)->getAttribute("href")));
} else {
// get rss conform date
$arr = split('\.',trim($node->textContent));
$date = date(DATE_RSS,mktime(0,0,0,$arr[1],$arr[0],$arr[2]));
}
}
file_put_contents("magazin.rss",$rssdom->saveXML());


Hier noch einmal das komplette Beispiel-Skript welches einen RSS-Feed für das Magazin von www.selfhtml.de erstellt: rss-feed-creator



Die erstellte Datei magazin.rss kann dann in einem Feed-Reader eingelesen werden. Für unseren Magazin-Feed aus dem Beispiel ist dann in einem Feed-Reader etwa folgendes zu sehen:



Weiter

Weitere Seiten im Artikel "RSS-Feeds erstellen"