xml-Datei einlesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • xml-Datei einlesen

    hallo,
    ich muss mich seit kurzem auch mit dem Einlesen von xml-Datein mit php beschäftigen. Generell denke ich, das ich das Grundprinzip verstanden habe. Nun bin ich aber an einer Sache, bei der ich überhaupt nicht weiterkomme. Vielleicht könnte mir einer von euch helfen!

    Es geht um folgendes:
    Ich muss eine xml-Datei von einem externen Server parsen und weiterverarbeiten. Diese Datei hat folgende Struktur:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <news>
    <entity>
    <id></id>
    <titel></titel>
    <hauptueberschrift></hauptueberschrift>
    <unterueberschrift></unterueberschrift>
    <text></text>
    <start></start>
    <ende></ende>
    <hauptrubrik></hauptrubrik>
    <unterrubrik></unterrubrik>
    <thumb></thumb>
    <bild></bild>
    <bild></bild>
    <bild></bild>
    <bild></bild>
    </entity>
    </news>

    Zu beachten ist, dass die Anzahl der Knotenpunkte <bild> je nach Artikel unterschiedlich sein können - d.h. - es gibt Artikel mit einem Bild-Knoten, und es kann Artikel mit bis zu 10 Bild-Knoten geben. Wie gesagt, die Datei liegt extern - ich kann sie nur über einen Link aufrufen, und die Datei verfügt über keine "dtd" - d.h. ich kann den gewünschten Artikel auch nicht mit get_element_by_id aufrufen. Da das Ganze in ein anderes System eingebunden ist welches mit php4 läuft, kann ich kein php5 verwenden.
    Was will ich nun tun! Bei meinem ersten Aufruf lese ich die Knoten "titel, thumb und teile von text" aus (dies funzt) am ende dieser Ausgabe steht "weiterlesen..." wenn man darauf klickt, kommt der gesamte Artikel - dies funzt auch. Mein Problem ist nun, dass wenn ein Artikel mehrere Bild-Knoten hat, das Ganze durcheinander kommt - also ab deiesem Artikel (mit mehreren Bilder) kommen in den nachfolgenden Artikeln falsche Bilder.

    Beispiel:
    der zweite Artikel hat drei Bilder!
    -> der erste kommt richtig
    -> im zweiten steht nur das erste Bild drin
    -> im dritten kommt das zweite Bild vom zweiten
    -> im vierten kommt das dritte Bild vom zweiten

    Für die Abfrage habe ich folgendes verwendet:
    PHP-Code:
    $dom domxml_open_file("http:/link/xml-Datei.php");

    $root $dom->document_element();

    $node_id $root->get_elements_by_tagname("id");
    $node_titel $root->get_elements_by_tagname("titel");
    $node_text $root->get_elements_by_tagname("text");
    $node_bild $root->get_elements_by_tagname("bild");

    for (
    $i 0$i<count($node_id); $i++) {
       
    $id $node_id[$i];
       
    $titel $node_titel[$i];
       
    $text $node_text[$i];
       
    $bild$node_bild[$i];
       if (
    $id->get_content() == $wahl) {
           print (
    '<b>' utf8_decode($titel->get_content()) . '</b><br />');
        print (
    utf8_decode($text->get_content()) . '<br />');
        print (
    '<img src='.$bild->get_content().'><br /><br />');
       }

    Wie gesagt, Frust pur! - ich komme einfach auf keinen grünen Zweig.

    Wenn sich bitte jemand melden würde, wäre ich euch echt Dankbar.

    Gruß, Dietmar
    Zuletzt geändert von DietmarBr; 12.10.2005, 10:15.

  • #2
    du müsstest (soweit ich es verstehe) mit der struktur arbeiten - bis jetzt hast du eine allumfassende holzfällermethode.

    ich würde erst alle einträge festhalten - get_elements_by_tagname('entity') gibt mir ein array voller knoten (news).

    jedes einzelne durchlaufend (über child_nodes() ansprechen) kannst du prüfen, ob es kinder namens "bild" hat - wenn ja, lassen sie sich bestimmt in ein array einlesen, durchlaufen und über get_content() ausgeben.

    Kommentar


    • #3
      Danke penizillin

      für deine Antwort und die Anregungen.

      Das hatte ich soweit auch schon probiert, und ich habe auch alle Bild-Knoten in ein Array ein- bzw. wieder auslesen können. Das Problem ist allerdings, dass in den Bild-Knoten kein Anhaltspunkt steht, zu welchem Artikel sie gehören.

      Aber mir ist da vorhin ne Idee gekommen, hab sie allerdings noch nicht getestet:

      Ich müßte alle <entity> durchlaufen und nach diesem mit dem richtigen <id>-Knoten suchen. Wenn ich diesen gefunden habe, müsste ich alle Knoten welche sich in diesem <entity> befinden in ein Array einlesen. Dieses könnte man ja dann einfach weiterverarbeiten.

      Das Problem ist nur, dass ich momentan keinen Plan habe, wie ich das anstellen soll, da ja get_element_by_id nicht funzt!

      Gruß, Dietmar
      Zuletzt geändert von DietmarBr; 12.10.2005, 14:27.

      Kommentar


      • #4
        Das Problem ist allerdings, dass in den Bild-Knoten kein Anhaltspunkt steht, zu welchem Artikel sie gehören.
        das habe ich mit "holzfällermethode" gemeint.

        Ich müßte alle <entity> durchlaufen [...]
        genau das habe ich dir doch vorhin gesagt!

        Das Problem ist nur, dass ich momentan keinen Plan habe, wie ich das anstellen soll
        auch dazu habe ich dir ein paar ratschläge gegeben.

        Kommentar

        Lädt...
        X