Fragen zum Thema XML
Stephan Fechner
- xml
Hi leute,
bin heute das erste mal auf das thema XML gestoßen! hab vorher schon immer diese button etc. auf diversen websites gesehen, wuste aber nie recht was admit anzufangen! eben passierten also meine ersten XML versuche, habe dazu aber gleich zwei fragen! und zwar sieht das ganze ei mir so aus:
$anzahl = 30;
$tv = "http://klack.de/klackTopRSS.xml ";
$content = implode("", file($tv));
preg_match_all("/<item>(.*?)</item>/si", $content, $results);
for($i=0;$i<$anzahl && $i<count($results[1]);$i++) {
preg_match("/<link>(.*?)</link>/si", $results[1][$i], $link);
preg_match("/<title>(.*?)</title>/si", $results[1][$i], $title);
preg_match("/<dc:date>(.*?)</dc:date>/si", $results[1][$i], $date);
preg_match("/<description>(.*?)</description>/si", $results[1][$i], $description);
$link = $link[1];
$title = $title[1];
$date = $date[1];
$description = $description[1];
echo "<br><br><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td class="text_000000">";
echo "<span class="forum"><a href="".$link."" target="_blank">".$title."</a></span><br>".$description."";
echo "</td></tr></table>";
}
mein problem ist nun das beim internet explorer immer hinter $description ein ]]> steht! ich als fuchs ;) dachte mir ok ersetzen wir das ganze mal mit str_replace, dann lief es auch, bis ich es in netscape etc. ausprobiert habe! da ging dann gar nix mehr! wenn ich es lasse sieht es erstens dumm aus und zweitens wird im netscape etc. nix angezeigt (aber wenigstens kommt es dann nimmer zu fehlern...)
meine zweite frage lautet wie ich das heir ausgelesen bekommen:
dc:date2004-11-01T20:15:00+01:00</dc:date>
ich will das format eigentlich so stehen haben:
01.11.2004 22:55 Uhr
ich hoffe das ist irgendwie möglich, werde mich jetzt wieder weiter bei google durchschlagen, habe bisher noch nichts brauchbares bei google zu meinen fragen gefunden!
MFG Stephan Fechner
dc:date2004-11-01T20:15:00+01:00</dc:date>
ich will das format eigentlich so stehen haben:
01.11.2004 22:55 Uhr
Stephan,
Was willst du mit der Ortszeit des 55. Längengrades ö.v.G.?
Gun*SCNR*nar
Hallo,
Ich stelle nur das Thema richtig!
Grüße
Thomas
Hallo Stephan,
bin heute das erste mal auf das thema XML gestoßen! hab vorher schon immer
diese button etc. auf diversen websites gesehen, wuste aber nie recht was
admit anzufangen!
Ich vermute, Du meinst diesen Button?
In gewisser Weise ist der irreführend, was der auf den meisten Seiten
verlinkt, ist RSS. RSS in seinen verschiedenen Geschmacksrichtungen ist
natürlich in XML-Format, aber in etwas ist das so, als würde man an jeden
Link »Webseite« ran schreiben. Der Button stammt aus einer Zeit, als XML
noch relativ hip und der Umgang damit ziemlich ungewöhnt war, das vielleicht
als Erklärung dafür, daß so viele diesen Button für den Link auf ihren
RSS-Feed nehmen. Irgendwann verselbstständigt sich sowas.
Guck Dir mal diese Sammlung von Tutorials über RSS durch, wenn Dir das
ganze noch nicht so klar ist.
preg_match_all
Irgendwann wirst Du beim Parsen von XML mit reinen regulären Ausdrücken ans
Ende kommen. Zudem: Du hast wahrscheinlich einfach in den Quellcode einer
RSS-Datei geguckt und versuchst jetzt dafür einen entsprechenden Parser
zu bauen? Ich muß Dir ein schäbiges Geheimnis verraten: Es gibt verschiedene
Versionen von RSS und sie sind untereinander nicht kompatibel. RSS 0.9 ist
inkompatibel zu RSS 0.91 bis 0.94. RSS 0.9x ist inkompatibel zu RSS 1.0.
RSS 1.0 ist inkompatibel zu RSS 2.0. Und alle RSS-Versionen werden benutzt.
Uuund: Es gibt seit einiger Zeit ein Konkurrenzformat zu RSS namens Atom.
Auch inkompatibel. RSS hat da eine ziemlich schwierige Entwicklungsgeschichte
hinter sich.
Was Du versuchst zu parsen, dürfte nach den Quelltextschnipseln (dc:date)
entweder RSS 1.0 oder ein recht unorthodoxes (nach den Worten von Dave
Winer: »funky«) RSS 2.0 sein.
Wenn Du dir nun die Arbeit erleichtern möchtest, dann schnappst Du Dir
wahrscheinlich irgendwann einen SGML/XML-Parser (SAX oder DOM), parst damit
die RSS-Feeds und schreibst die Daten in eine entsprechende Datenstruktur.
Wobei Dein Programm aber immer noch je nach dem jeweiligen RSS-Format
arbeiten muß. Das ist kein neuen Problem. Weswegen es inzwischen auch für
die meisten Programmiersprachen entsprechende RSS-Parser gibt, die die
unterschiedlichen Formate fressen und einem so die Aufgabe erleichtern.
Vielleicht probierst Du es mal aus, es gibt diverse Parser in Perl,
PHP (Achtung, anscheinend nur RSS 1.0) und Python. Es erspart einem
eine Menge nicht-trivialer Arbeit.
meine zweite frage lautet wie ich das heir ausgelesen bekommen:
dc:date2004-11-01T20:15:00+01:00</dc:date>
Das ist ein Datum nach dem Dublin-Core Modul, das eher auf RSS 1.0 schließen
läßt, aber auch eine Zeitlang von einigen Herstellern in RSS 2.0 benutzt
wurde. Das, was zwischen den Tags erlaubt, ist ein Datum nach einer
vom W3C definierten Untermenge der in einem ISO-Standard definierten
möglichen Datentypen. Das sind immer noch mehrere unterschiedliche Strings
mit unterschiedlicher Struktur, wie Du in dieser Erklärung sehen kannst.
Ich glaube, die allermeisten RSS 1.0 Feeds da draußen verwenden die
zweit- oder drittlängste Version, im Prinzip sind aber alle Varianten
erlaubt.
(In RSS 0.9x und 2.0 ist das Datum übrigens in dem für Mails in RFC 822
spezifizierten Format geschrieben, dafür steht es dann aber auch nicht
in dc:date sondern in <pubDate>)
ich will das format eigentlich so stehen haben:
01.11.2004 22:55 Uhr
Im Prinzip, _wenn_ Du eine vorgegebene Struktur hast, dann könntest Du
diese Umwandlung mit einem Regulären Ausdruck vornehmen. Wenn Du aber
schon vorgefertigte Parser dafür nimmst, dann dürften diese Dir je nach
Parser das Datum in einem jeweiligen Format bereitsstellen, Unix Timestamp
oder ein Date-Objekt oder sowas.
(Sorry, ich will Dir keine Angst machen. Aber ehe Du Dich irgendwann ärgerst..)
Tim