Felix2212p: XML mit PHP verarbeiten

Hallo,

ich habe mit einer foreach-Schleife Datensätze aus einem XML Files gelistet. Nun möchte ich zu jedem Datensatz eine Detailansicht erzeugen.
Dieses Thema beschäftigt mich erst seit gestern - ich bin somit ein absoluter Anfänger.

Vereinfachte Struktur des XML File ist folgende:

<News>
<id>123</id>
<titel></titel>
<text></text>
</News>

<News>
<id>456</id>
<titel></titel>
<text></text>
</News>

Ich gebe die ID als Parameter für die Detailansicht per Link weiter:
Code für die Ergebnisliste:

$xml=new SimpleXMLElement(file_get_contents("http://...",FALSE,$xcontext));

foreach ($xml->news as $pm) {
    <a href="detail.php?".$pm->id."">Zur Gesamtnachricht</a>
}

Könnte mir jemand eine Richtung vorgeben? Es muss nicht die Lösung sein, ein Denkanstoss reicht. Ich möchte es ja nicht abschreiben, sondern es auch verstehen lernen.

Vielen Dank vorab!
Gruß Peggy

PS: Kann jemand ein Buch zu dem Thema XML-PHP empfehlen oder eine gute Dokumentation?

  1. Lieber Felix2212p,

    <News>
    <id>123</id>
    <titel></titel>
    <text></text>
    </News>

    Warum nicht so?

    <News id="123" titel="Was auch immer die Überschrift sein mag">  
        <![CDATA[Hier der Text der News ganz ausführlich]]>  
    </News>
    

    Ich gebe die ID als Parameter für die Detailansicht per Link weiter:
    [...]
        <a href="detail.php?".$pm->id."">Zur Gesamtnachricht</a>

    Du versuchst hier die Nummer der ID als URL-Parameter an das Linkziel zu hängen. Das geschieht aber in der Regel so: http://www.eample.org/script.php?variablenname1=wert1&variablenname2=wert2

    Damit Du später im $_GET-Array Deine ID mittels $_GET['id'] benutzen kannst, sollte Dein Link so aussehen:
    <a href="detail.php?id=123">Zur Gesamtnachricht</a>

    Also wirst Du Deine Schleifen-Zeile so umgestalten müssen:
    $htmloutput .= '<a href="detail.php?id='.$pm->id.'">Zur Gesamtnachricht</a>';

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Liebe Felix2212p :-) Karte+Geb.-Datum+Buchstabe Vorname

      Hi Felix,

      die Datei, die ich einbinde kommt von extern. Auf die Struktur habe ich keinen Einfluss...

      Hier die Anzeige: http//www.nomina.de/pressebox.php

      Link geht noch nach extern. Die Herrschaften möchten aber eine Darstellung der einzelnen News ebenfalls in unserem Layout.

      Ich sitze hier und habe keinen Ansatz. Vielleicht liegt es auch am trüben Wetter.

      Gruß nach Erlangen. Peggy

      Lieber Felix2212p,

      <News>
      <id>123</id>
      <titel></titel>
      <text></text>
      </News>

      Warum nicht so?

      <News id="123" titel="Was auch immer die Überschrift sein mag">

      <![CDATA[Hier der Text der News ganz ausführlich]]>
      </News>

      
      >   
      > > Ich gebe die ID als Parameter für die Detailansicht per Link weiter:  
      > > [...]  
      > >     <a href=\"detail.php?".$pm->id."\">Zur Gesamtnachricht</a>  
      >   
      > Du versuchst hier die Nummer der ID als URL-Parameter an das Linkziel zu hängen. Das geschieht aber in der Regel so: http://www.eample.org/script.php?variablenname1=wert1&variablenname2=wert2  
      >   
      > Damit Du später im $\_GET-Array Deine ID mittels `$_GET['id']`{:.language-php} benutzen kannst, sollte Dein Link so aussehen:  
      > `<a href="detail.php?id=123">Zur Gesamtnachricht</a>`{:.language-html}  
      >   
      > Also wirst Du Deine Schleifen-Zeile so umgestalten müssen:  
      > `$htmloutput .= '<a href="detail.php?id='.$pm->id.'">Zur Gesamtnachricht</a>';`{:.language-php}  
      >   
      > Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),  
      >   
      > Felix Riesterer.
      
      1. Liebepeggy,

        Liebe Felix2212p :-) Karte+Geb.-Datum+Buchstabe Vorname

        sorry, das war der ungeprüfte Automatismus in meinen Benutzereinstellungen.

        die Datei, die ich einbinde kommt von extern. Auf die Struktur habe ich keinen Einfluss...

        Aha... und wie kommt Dein Script an diese Datei?

        Hier die Anzeige: http//www.nomina.de/pressebox.php

        ... ekliger Code. Aber das kann daran liegen, dass Du hier auf irgendeinen vorgefertigten Murks zurückgreifen musst.

        Link geht noch nach extern. Die Herrschaften möchten aber eine Darstellung der einzelnen News ebenfalls in unserem Layout.

        Das sagt mir jetzt genau was...?

        Ich sitze hier und habe keinen Ansatz.

        Den Eindruck habe ich auch. Was genau ist Dein Problem?

        Vielleicht liegt es auch am trüben Wetter.

        Vielleicht - vielleicht auch nicht.

        Lieber Felix2212p,

        <News>
        <id>123</id>
        <titel></titel>
        <text></text>
        </News>

        Warum nicht so?

        <News id="123" titel="Was auch immer die Überschrift sein mag">

        <![CDATA[Hier der Text der News ganz ausführlich]]>
        </News>

          
        Bitte kein [TOFU](http://de.wikipedia.org/wiki/TOFU) mehr!  
          
        Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),  
          
        Felix Riesterer.
        
        -- 
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        
        1. Hatte vergessen, dass die Datei 1x pro Stunde auf unseren Server geladen wird.

          Mein Script zur Darstellung des Listings ist (nur ein Beispiel zum testen):

          <?PHP
          if($filter="crm"){
           $xml_full = new SimpleXMLElement(file_get_contents("http://www.nomina.de/pressebox/crm.xml",FALSE,$xcontext));
          }
          ?>

          <table style="width: 95%; border: 0px; border-color: #FFFFFF;">

          <?PHP
          foreach ($xml_full->items->press_release as $pm_full) {

          $headline = $pm_full->headline;
           $sub_headline = $pm_full->sub_headline;
           $expose = $pm_full->expose;

          echo "<TR>\n";
           echo "<TD>\n";

          echo "<a style="text-decoration: underline; color: #414141;" href="".$pm_full->link.""><font style="color: #414141; font-weight:bold;">".utf8_decode($headline). "</font></a><font style="color: #663300; font-weight:medium;"><BR>".utf8_decode($sub_headline) ."</font><BR>\n";
           echo "<font style="color: #414141; font-weight:medium;">" .utf8_decode($expose) ."</font><BR><a style="text-decoration: underline; color: #663300;" href="".$pm_full->link.""><img src="http://www.nomina.de/link.gif" border="0">&nbsp;&nbsp;Zur vollständigen Pressemitteilung auf www.pressebox.de</a><BR><BR>\n";

          $attachments = $pm_full->attachments;

          if ($attachments){
            echo "<B>Download (Bilder/PDF):</B><BR>";

          foreach($pm_full->attachments->attachment as $at){
             $link = $at->link;
             $size = $at->size;
             $thumblink = $at->thumblink;
             $description = $at->description;

          echo "<a style="text-decoration: underline; color: #663300;" href="".$link."" target="_blank">".utf8_decode($description)."</a> (".$size.")<BR>";
            }
           }

          echo "</TD>\n";
           echo "</TR>\n";
          }
          ?>
          </table>

          Link zur xml Datei wäre folgender:

          http://www.nomina.de/pressebox/crm.xml

          Gruß Peggy

          1. Liebe Peggy,

            if($filter="crm"){
            $xml_full = new SimpleXMLElement(file_get_contents("http://www.nomina.de/pressebox/crm.xml",FALSE,$xcontext));
            }

            warum stellst Du das Ergebnis dieser Zuweisung in Frage? $filter="crm" ergibt immer einen Wert, der als wahr interpretiert werden muss.

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Guten Morgen nach Ellwangen,

              der Code Schnipsel kommt von unserem Provider Claranet. Habe ihn zum Testen einfach übernommen. Verschiedene Filter deshalb, da die News auf unseren verschiedenen Themen-Sites angezeigt werden soll, z.B. CRM, RFID, SOA... und wir von pressebox hierfür verschiedene XML Dateien geliefert bekommen.

              Gruß Peggy