XML mit PHP ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XML mit PHP ausgeben

    Hallo,

    versuche mich an einen kleinen Script und komme nicht weiter. Eine XML Datei von einem anderen Server abholen und mit request und readfile in eine PHP Seite einfügen, soweit bin ich zumindest gekommen.

    <?php

    $request="http://url............ ";

    if (!$data = readfile($request)) {
    echo "Ein Fehler ist aufgetreten!";
    }
    else {
    echo $data;
    }
    ?>


    Nun erscheint der Text jedoch als lose Folge. Wie müsste das aussehen, wenn man den Inhalt der XML Seite vernünftig einsortieren sortieren möchte, nach Titel, Rubrik und so weiter, eventuell in verschiedenen Zellen einer Tabelle?

    Gruß Mele
  • Eingelesen wird sie schon, css Anweisungen brachten jedoch zumindest nichts. Mit loser Folge meine ich, fängt oben an und hört unten auf, dabei auch alles, was garnicht ausgegeben werden sollte. Habe mich nun erst einmal entschlossen einen Parser zu verwenden. SimpelXML geht leider nicht, da die Seiten verteilt bei verschiedenen Providern liegen und nicht alle PHP5 haben. Habe ein Script für einen anderen gefunden, doch da habe ich nun auch erhebliche Probleme bei der Anpassung. Und zwar sieht es da bisher etwa so aus:

    function startElement($parser, $name, $atts) {
    global $html;

    switch (strtolower($name)) {


    case "author": $html .= "<h3>".$atts["AUTOREN"]."</h3>";
    break;
    case "index
    ": $html .= "<a name=\"".$atts["KEYWORD"]."\"></a>";
    break;
    case "ref": $html .= "<a href=\"#".$atts["ID"]."\">";
    break;

    default:
    break;
    }
    }


    In der XML kommen die Daten für Bilder etwa nach dem Muster an:

    <Imageklein>
    <URL>http://.......pfadjpg</URL>
    </Imageklein>

    <Imagegross>
    <URL>http://.......pfad.jpg</URL>
    </Imagegross>


    Wie müsste die Funktion aussehen, damit der Pfad von Imageklein richtig ausgegeben wird und von Imagegross nicht ausgegeben wird? Wie lässt sich Text und Images in zwei unterschiedlichen Zellen ausgeben und wie erreicht man einen Zeilenumbruch? Wenn ich da <br> mit einfüge, so steht das bisher im Quelltext vor dem Satzteil und nicht hinter.
  • Bedenke bitte, das ich nicht in deinem Programm drin stecke. Ich kann nur das an Informationen auswerten was du hier ins Forum schreibst.

    So wie ich das sehe, gehst du über den DOM-Tree des XML-Files drüber und willst die Informationen, die du brachst in (X)HTML ausgeben.

    Sollte die Funktion sich nicht rekursiv selbst aufrufen? Das sehe ich bisher nicht. Ich gebe mal in Pseudocode an, wie ich mir sowas vorstellen würde:

    Quellcode

    1. function xmlAnalysis($xmlElement)
    2. {
    3. if ($xmlElement.name = "author")
    4. {
    5. $html .= "...";
    6. foreatch ($xmlElement.alleUnterlelemte as $xmlUnterElement)
    7. {
    8. xmlAnalysis($xmlUnterElement);
    9. }
    10. }
    11. else if ($xmlElement.name = "imageklein")
    12. {
    13. $html .= "...";
    14. ...
    15. }
    16. ...
    17. }
    Alles anzeigen
  • Hallo,

    habe in den letzten Tagen erst einmal festgestellt, dass alle bisherigen Anläufe in eine falsche Richtung gingen. Hatte mich vorher noch so intensiv mit beschäftig und fertige Scripte nur den vorhanden Seiten angepasst. Vor zwei Wochen etwa kam dann eine Nachricht von Amazon, dass durch eine Umstellung ab Ende März der alte Server abgeschaltet wird. Dabei geht es nicht nur um eine neue Webadresse, sondern auch alles was vom Script bei der Anfrage mit übergeben wird, hat sich entscheident verändert. Die alten Scripte laufen dann nicht mehr. Nun geht es mir nicht um die 10 Euro im Monat, die da vielleicht über etwas Vergütung kommen, sondern darum, das ich von den Scripten in verschiedenen Websiten immer mal so 10 bis 20 Seiten mit eingebunden habe, was dann den ganzen Aufbau doch stören würde.

    Zum Thema, das letztens war ein Script zum parsen mit expat, habe leider nach vielen endlosen versuchen erst mitbekommen, dass man da zwar gut formatieren mit kann, aber dennoch nicht einfach Abschnitte ausblenden kann. Jetzt habe ich ein anderes, irgend etwas mit Dom ist das wohl schon und läuft zumindest unter PHP4. Soweit bin ich jetzt, wenn auch noch lange nicht fertig.

    Quellcode

    1. <?php
    2. $doc = domxml_open_file("die-Testseite.xml");
    3. $Elemente = $doc->get_elements_by_tagname('Item');
    4. foreach ($Elemente as $artikel) {
    5. $titel = $artikel->get_elements_by_tagname('Title');
    6. if (count($titel) > 0) {
    7. $Beginn = $titel[0];
    8. $derTitel = $Beginn->get_content();
    9. } else {
    10. $derTitel = '';
    11. }
    12. $Autoren = $artikel->get_elements_by_tagname('Author');
    13. if (count($Autoren) > 0) {
    14. $Autorinnen = $Autoren[0];
    15. $alleAutoren = $Autorinnen->get_content();
    16. } else {
    17. $alleAutoren = '';
    18. }
    19. $Buchbindung = $artikel->get_elements_by_tagname('Binding');
    20. if (count($Buchbindung) > 0) {
    21. $welcheBindung = $Buchbindung[0];
    22. $dieseBindung = $welcheBindung->get_content();
    23. } else {
    24. $dieseBindung = '';
    25. }
    26. // Ab hier müsste eine Auswahl getroffen werden!
    27. $BildElement = $artikel->get_elements_by_tagname('URL');
    28. if (count($BildElement) > 0) {
    29. $ImageElement = $BildElement[0];
    30. $einBild = $ImageElement->get_content();
    31. } else {
    32. $einBild = '';
    33. }
    34. print($derTitel . '<br />' . $alleAutoren ."\n");
    35. print($dieseBindung . $derPreis."\n");
    36. print "<hr>\n";
    37. print "<img src=\"$einBild\">";
    38. }
    39. ?>
    Alles anzeigen


    Es geht mir um die Images, damit die richtigen ausgelesen wird und auch damit die nicht doppelt ausgelesen werden. Habe verschiedene Möglichkeiten probiert, doch ohne Error ging rein garnichts. Die Abschnitte sehen in der XML-Seite etwa wie folgt aus:

    Quellcode

    1. <SmallImage>
    2. <URL>http://www.images.de/images001.jpg</URL>
    3. <Height Units="pixels">75</Height>
    4. <Width Units="pixels">51</Width>
    5. </SmallImage>
    6. <MediumImage>
    7. <URL>http://www.images.de/images002.jpg</URL>
    8. <Height Units="pixels">160</Height>
    9. <Width Units="pixels">101</Width>
    10. </MediumImage>
    11. <LargeImage>
    12. <URL>http://www.images.de/images003.jpg</URL>
    13. <Height Units="pixels">420</Height>
    14. <Width Units="pixels">287</Width>
    15. </LargeImage>
    16. <ImageSets>
    17. <SmallImage>
    18. <URL>http://www.images.de/images001.jpg</URL>
    19. <Height Units="pixels">75</Height>
    20. <Width Units="pixels">51</Width>
    21. </SmallImage>
    22. <MediumImage>
    23. <URL>http://www.images.de/images002.jpg</URL>
    24. <Height Units="pixels">160</Height>
    25. <Width Units="pixels">109</Width>
    26. </MediumImage>
    27. <LargeImage>
    28. <URL>http://www.images.de/images003.jpg</URL>
    29. <Height Units="pixels">420</Height>
    30. <Width Units="pixels">287</Width>
    31. </LargeImage>
    32. </ImageSets>
    Alles anzeigen


    Wenn ich bei get_elements_by_tagname('URL') statt URL gleich MediumImage einfüge, so erfolgt im Quelltext nach den img src ein Zeilenumbruch und Lösungsansätze dazu habe ich keine weiteren gefunden. Mit einer If Anweisung nach dem Schema habe ich es versucht, brachte auch nur Erros.

    Gruß Mele
  • Hallo,

    bin dann ja irgendwann noch fertig geworden. Das Script für PHP4 hätte ich mir eigentlich sparen können, da zwischenzeitlich bei allen Hostern auf PHP5 umgestellt. Ist aber nicht kürzer geworden, sondern noch viel länger. Für alle die es interessieren könnte, habe den Code mal zur Einsicht veröffentlicht.

    Für PHP4 noch wie hier auf der Seite begonnen mit DOM/XML und Für PHP5 mit SimpleXML .

    Gruß Mele