-
PHP - Teil 40 - XML (Teil 5): RSS-Feeds einlesen und ausgeben
22.01.2012 in PHP von daniel_koch
- Zum Downloadmanager hinzufügen
- PDF-Datei herunterladen
- Arbeitsmaterialien herunterladen
- Video
- Kommentare ansehen (2)
- Kategorie: PHP
- Erstellt mit Programmversion: PHP 5/6
- Kompatibel ab Programmversion: PHP 5
- Dateigröße (PDF): 1.3 MB
- Dateigröße (Arbeitsmaterial): 4 KB
- Bisherige Zugriffe: 61
Zum Downloadmanager hinzufügen PDF-Datei herunterladen (1.3 MB) Arbeitsmaterialien herunterladen (4 KB) Zugehöriges Video-Training ansehen
Tipp: Dieser Inhalt befindet sich auch auf der:
Lieber Gast …
… die Inhalte von PSD-Tutorials.de stehen nur registrierten Mitgliedern zur Verfügung. Damit wollen wir den Communitygedanken weiterführen. Als Mitglied trägst du - wenn auch nur im Kleinen - zum Puls der Community bei. Und nur so ist es möglich, weiterhin hochwertige Inhalte für alle bereitzustellen.
Vorteile der kostenlosen Mitgliedschaft
Mit der kostenlosen und schnell erledigten Registrierung erhältst du viele nachhaltige Vorteile, die wir dir hier in aller Kürze aufzeigen möchten:
- PSD steht für professionelles Know-how in den Bereichen Bildbearbeitung mit Photoshop, Fotografie, Webentwicklung, Layout- und Vektorbearbeitung, 3D-Bearbeitung mit Cinema 4D und Co.
- Über 2200 Tutorials mit druckbarer PDF-Datei und teilweise den zugehörigen Arbeitsmaterialien
- Mehr als 500 Video-Trainings als Stream zur Direktanzeige und zum Download
- Abruf von über 1000 Downloads zu Photoshop-Presets, 3D-Modellen, Grußkarten, Texturen & Co
- Zugriff auf ein sehr aktives Forum mit Antworten im Minutentakt
- Deine Daten sind sicher. Sie werden nicht weitergegeben! Die Mitgliedschaft kann jederzeit und ohne Aufwand wieder gelöscht werden.
Reinschnuppern als Gast
Niemand kauft gerne die Katze im Sack, auch wenn sie kostenlos ist. Wir haben eine Handvoll Tutorials und Video-Trainings ausgesucht, die du auch als Gast ohne Registrierung ansehen kannst. Gefallen sie dir, stehen dir nach der Registrierung alle oben genannten Inhalte zur Verfügung.
- Download: Spiegelungen 2
- Download: Vektor-Logo (Eidechse)
- Download: Sepia-Vintage-Effekt-Aktion
- Tutorial: Neue Pinsel erstellen leicht gemacht
- Tutorial: Kommerzielle Fotografie 01: Berufswunsch Fotografie
- Tutorial: Linien zum Glühen bringen
- Tutorial: Ballons aus einer Schublade
- Videotraining: CorelDRAW X6 Grundlagen - Hilfsmittel Freihand, 2-Punkt-Linie, Bezier, B-Spline, Polylinie, Stift, 3-Punkt-Kurve
- Videotraining: CorelDRAW X6 Grundlagen: Hilfsmittel Form - Heranziehen, Zurückweisen
- Videotraining: Die Programmoberfläche und der Arbeitsbereich von Adobe InDesign
- Videotraining: Lichtscheinkontureneffekt mit Animation
Das Punktesystem
Einen winzigen Haken gibt es noch. Es gibt bei uns ein Punktesystem. Damit soll erreicht werden, dass Mitglieder sich aktiv in unserer Community beteiligen. Sobald du im Forum schreibst oder Tutorials kommentierst, bekommst du Punkte. Mit diesen Punkten kannst du wiederum Tutorials anschauen oder Downloads herunterladen. Mit der Registrierung bei PSD-Tutorials.de erhältst du ein Startguthaben von 100 Punkten, womit du schon ein gutes Stück weit kommst.
PHP-Workshop-DVD - Basics & Tricks
- 12 Stunden Video-Training, 480 PDF-Seiten Tutorials
- Basics, Formulare, Datenbanken, XML und Co.
- 4 Stunden Bonusmaterial zum Webdesign (mit Photoshop
Kommentare
Tutorial empfehlen
Anleitung (Bilder + Extras werden nur für Mitglieder eingeblendet)
RSS-Feeds werden auf unglaublich vielen Webseiten angeboten. Denkt beispielsweise an die RSS-Feeds von Heise, die es unter http://www.heise.de/news-extern/news.html gibt. Aber auch andere Webseiten stellen ihre Inhalte als RSS-Feeds bereit.

In diesem Tutorial wird mit einem einfachen RSS-Feed gearbeitet, der lokal vorliegt.
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>medienwerke.de - Daniel Koch</title> <description>CMS-Support, Bücher, Videotrainings ...</description> <language>de</language> <link>http://www.medienwerke.de/feed/</link> <lastBuildDate>CEST02000000, 13 +02002011-10-20T14:50:23+02:0031 2011 11:29:07 +0000GMT</lastBuildDate> <item> <title>XML Schema: Die Nachteile von DTDs</title> <description>XML Schema ist ein neuer Ansatz, um XML-Dokumenttypen ohne Einsatz einer DTD zu beschreiben. Dabei stellt sich zunächst die Frage, warum es eigentlich eines solch neuen Ansatzes bedarf. Denn schließlich wurde im vorherigen Kapitel gezeigt, dass sich Dokumenttypen durchaus mit DTDs definieren lassen. Es gibt also offensichtlich Defizite, die beim Einsatz von DTDs zu Tage [...]</description> <link>http://www.medienwerke.de/2011/10/10/xml-schema-die-nachteile-von-dtds/</link> <pubDate>Mon, 10 Oct 2011 18:27:12 +0000</pubDate> <guid>http://www.medienwerke.de/?p=831</guid> </item> </channel> </rss>

Die hier gezeigten Möglichkeiten lassen sich so aber auch auf alle anderen RSS-Feeds anwenden. So könnt ihr also auch Feeds von Drittanbietern einbinden, müsst dann eben nur auf die richtigen Pfadangaben achten. Eben diese Pfadangabe wird innerhalb einer Variablen hinterlegt.
$file = 'dateiname.xml';
$xml = new DOMDocument('1.0', 'UTF-8');
DOMDocument werden zwei Parameter übergeben. Der erste Parameter gibt die Versionsnummer des Dokuments an, wie sie in der XML-Deklaration verwendet wird. Über den zweiten Parameter bestimmt man die anzuwendende Zeichenkodierung.<?xml version="1.0" encoding="UTF-8"?>
Ein immer wieder auftauchendes Problem im Zusammenhang mit dem Einlesen von XML-Dateien stellen Leerzeichen und Zeilenumbrüche dar. Im ungünstigsten Fall werden diese nämlich als zusätzliche Textknoten betrachtet, was dann zu einer nicht kontrollierbaren Ausgabe führt. Um solche Probleme zu umgehen, gibt es die Eigenschaft
preserveWhiteSpace. Darüber kann man explizit festlegen, ob die vorhandenen Leerzeichen und Zeilenumbrüche behalten werden sollen oder nicht. Will man sie behalten, setzt man den Wert der Eigenschaft auf TRUE, anderenfalls auf FALSE. Wird die Eigenschaft nicht gesetzt, greift automatisch der Standardwert TRUE. Im Zusammenhang mit RSS-Feeds sollte preserveWhiteSpace immer auf FALSE gesetzt werden.$xml->preserveWhiteSpace = FALSE; preserveWhiteSpace sollte immer vor dem Laden des Feeds definiert werden.
preserveWhiteSpace arbeitet, zeigt folgendes Beispiel.
<?php
$file = 'feed.xml';
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->preserveWhiteSpace = FALSE;
$xml->load($file);
$xml->save("ohneumbruch.xml");
?>
Hier wird das bereits bekannte XML-Dokument eingelesen. Aus dem eingelesenen Dokument werden nicht benötigte Leerzeichen und Zeilenumbrüche entfernt. Das so behandelte Dokument wird dann unter dem Namen ohneumbruch.xml abgespeichert. Vergleich man nun die originale mit der neu abgespeicherten Datei, werden die Unterschiede deutlich.
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>medienwerke.de - Daniel Koch</title> <description>CMS-Support, Bücher, Videotrainings ...</description>
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"><channel><title>medienwerke.de - Daniel Koch</title><description>CMS-Support, Bücher, Videotrainings ...</description>
Diese Unübersichtlichkeit spielt bei dieser Datei allerdings keine Rolle, da dieses neu abgespeicherte Dokument ja ohnehin ausschließlich zur manuellen Weiterverarbeitung da ist.
Zurück zum Beispiel. Das Dokument, das innerhalb der Variablen
$file deklariert wurde, muss nun geladen werden. Verwendet wird dafür die load()-Funktion.$xml->load($file);
Achtet hier unbedingt darauf, dass tatsächlich
load() verwendet wird. Denn DOM unterscheidet zwischen XML-Code, der in einem String hinterlegt ist, und XML-Code, der in einer Datei liegt. Bei der String-Variante muss loadXML() verwendet werden.
DOM erkennt also, ob es Fehler in der zu ladenden Datei gibt.
getElementsByTagName().
$date = $xml->getElementsByTagName('title')->item(0)->nodeValue;
Darüber kann direkt auf ein Element über dessen Namen zugegriffen werden. Im gezeigten Beispiel handelt es sich dabei um das Element
title. Welches Elements letztendlich ausgewählt werden soll, wird über item() bestimmt. Gibt man dort den Wert 0 an, wird im aktuellen Fall auf das erste title-Element zugegriffen, da die interne Zählung hier bei 0 beginnt. Nun soll allerdings nicht der Name des Elements, sondern dessen Inhalt ausgegeben werden. Der Zugriff auf eben jenen Inhalt geschieht dabei über nodeValue. Mehr ist tatsächlich nicht nötig, um auf die einzelnen Elemente und deren Inhalte zuzugreifen.
item-Element zugegriffen. Was aber, wenn ein RSS-Feed – und das ist eher die Regel als die Ausnahme – aus sehr vielen Einträgen besteht? In solchen Fällen muss eine Schleife definiert werden, die alle Elemente durchläuft.Die Ausgabe formatieren
Um wirklich alleitem-Elemente und deren Inhalte anzusprechen, greift man zu einer foreach()-Schleife. Hier zunächst ein einfaches Beispiel, wie eine solche Schleife aufgebaut ist.
$item = $xml->getElementsByTagName('item');
foreach ($item as $elem) {
echo $elem->getElementsByTagName('title')
->item(0)
->nodeValue;
}
Bei jedem Schleifendurchlauf wird das jeweilige
item-Element angesprochen. Auf die einzelnen Elemente, die es innerhalb des item-Elements gibt, lässt sich dann über die bereits gezeigte Funktion getElementsByTagName() zugreifen.
<?php
$file = 'feed2.xml';
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->preserveWhiteSpace = FALSE;
$xml->load($file);
$item = $xml->getElementsByTagName('item');
foreach ($item as $elem) {
?>
<table border="1">
<tbody>
<tr>
<td><b>Titel:</b></td>
<td><?php echo $elem->getElementsByTagName('title')
->item(0)
->nodeValue; ?></td>
</tr>
<tr>
<td><b>Beschreibung:</b></td>
<td><?php echo $elem->getElementsByTagName('description')
->item(0)
->nodeValue; ?></td>
</tr>
<tr>
<td><b>Link:</b></td>
<td><a href="<?php echo $elem->getElementsByTagName('link')
->item(0)
->nodeValue; ?>">Seite aufrufen</a></td>
</tr>
<tr>
<td><b>Datum:</b></td>
<td><?php echo $elem->getElementsByTagName('pubDate')
->item(0)
->nodeValue; ?></td>
</tr>
</tbody>
</table>
<br />
<?php
}
?>

Wie ihr die Ausgabe letztendlich gestaltet, bleibt dann natürlich euch überlassen.
-
Reklame
-
-
- Fotobüchern
- Umrandung um Textfeld
- Kanten glätten bei meinem Bild oder Vektor?
- After Effects Ram-Vorschau - Problem mit Cache (aktualisert nicht)
- blender render stürzt ständig ab
- jQuery - Größe von einem Frameset ändern?
- [CS5] "Löschen-Mitteilung"
- Zerissenes Foto
- Biete Programmierung Ihres PSD-Designs
- Fehler beim Platzieren von Bildern
- Zeilenumbruch CS4
- Gestaltung eines Logos
- Kaufberatung Drucker
- Dynamische Auswahlliste: Name und ID übergeben
- Adobe Encore - Probleme Schaltflächen Unterbild
- 2 Fotos mit unterschiedlichem Schlagschatten in einer Datei
- Copyright-Frage - öffentliche Veranstaltung
- Photoshop auf Mini Lappi
- Link auf Anker - Firefox Problem
- Auftrag: Individuelle Flash-Gallerie
-
-
Aktuelles Commag
Anzeige
-
Anzeige


InterMedia
15.05.2012 - 15:59
Interessanter Beitrag zum auslesen von XML Informationen. Hat mir sehr geholfen um die Schnittstelle zwischen XML MySQL sauber hinzubekommen!
leveler
22.01.2012 - 13:09
Sehr gut! Wieder was dazugelernt.