Stephan Fechner: Fragen zum Thema 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

  1. 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

    --
    "Nobody wins unless everybody wins." (Bruce Springsteen)
  2. Hallo,

    Ich stelle nur das Thema richtig!

    Grüße
    Thomas

  3. 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