kostenloser Webspace werbefrei: lima-city


RSS-Feed auslesen: channel und content:encoded ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    rssping

    rssping hat kostenlosen Webspace.

    Hallo

    ich will einen RSS-Feed (RSS2) auslesen, aber bekomme nicht alle Daten zur Ausgabe

    Daten aus Feed-RSS in PHP-Object holen:
    $objres = simplexml_load_file($feedurl, 'SimpleXMLElement', LIBXML_NOCDATA);


    foreach() für die Channel-Info ... das geht komischer Weise nicht:
    channel ist kein Array, sondern direkt Objekte

    foreach($objres->channel as $fkey => $info) { 
    echo "<br />".$fkey." --- ".$info."\n"; 
    }


    Ausgabe: channel ---
    ... häöää? ... ich bin doch schon innerhalb des Elements $objres->channel
    was will dann der key channel da ... ich erwarte eigentlich Daten eine Ebene tiefer ?!

    aber mit "direkter" Zugriff geht es dann doch ?!?!?

    echo "<br />title --- ".(string)$objres->channel->title."\n"; 
    echo "<br />link --- ".(string)$objres->channel->link."\n"; 
    echo "<br />description --- ".(string)$objres->channel->description."\n"; 
    echo "<br />lastBuildDate --- ".(string)$objres->channel->lastBuildDate."\n"; 
    echo "<br />language --- ".(string)$objres->channel->language."\n"; 
    echo "<br />generator --- ".(string)$objres->channel->generator."\n";


    verstehe ich nicht .... warum es bei channel nicht auch mit foreach geht ... ?

    item ist ein Array, dessen Array-Elemente wiederum die Objekte enthalten

    und bei den items geht es dann zwar mit foreach,
    foreach($objres->channel->item as $items) { 
       foreach($items as $ikey => $ival) { 
          echo "<br />".$ikey." --- ".$ival."\n"; 
       }
    echo "<br />\n"; 
    }


    damit bekomme ich zu jedem <item> die Elemente (mit Key) ausgegeben

    aber da ist ein Element in der RSS, welches garnicht im $objres ankommt .... ???

    <item>
      <title>Name des beitrags</title>
      ... <pubDate>... etc. 
    
      <content:encoded><![CDATA[<p>Inhalt mit <strong>HTML</strong> Code wie IMG-Tags, etc. </p>
      <p>&nbsp;</p>
      ]]></content:encoded>
    </item>


    aber das Elemet "content:encoded" taucht in den $objres Daten dann garnicht auf
    aus getestet durch eine Ausgabe mit print_r() ... es ist einfach nicht vorhanden ?!

    a) wieso geht channel-Daten nicht mit foreach ?
    b) warum wird Elemet "content:encoded" einfach ignoriert ?

    gibt es eine "Bessere" Möglichkeit um RSS2 Daten auszulesen, als mit simplexml


    Beitrag zuletzt geändert: 1.7.2012 11:50:29 von rssping
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. zu a)

    Versuch mal:
    foreach($objres->channel[0] as $fkey => $info) { 
    echo "<br />".$fkey." --- ".$info."\n"; 
    }


    zu b)
    Ich denke PHP wird da ein Problem mit dem Doppelpunkt haben.
    Gibt bestimmt eine Lösung dazu, jedoch bin ich jetzt zu müde danach zu suchen.

    gn8
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    philippkern schrieb:
    zu b)
    Ich denke PHP wird da ein Problem mit dem Doppelpunkt haben.
    Du könntest dir mal den etwas aufwendigeren DOM ansehen, der kann das. Dabei würdest du dann die Klasse DOMDocument verwenden...
  5. .... Namespace !!!!

    $ns = $objres->getNamespaces(true);
    
    foreach($objres->channel->item as $items) { 
       echo "<u>".$items->title."</u>\n"; 
       echo "<br />\n"; 
       echo "<br />".$items->children($ns['content'])->encoded."\n";  
       echo "<br />\n"; 
    }


    oder, wenn die Namespace-Definition nicht in der RSS steht, dann direkt

    foreach($xmldata->channel->item as $items) { 
       echo "<u>".$items->title."</u>\n"; 
       echo "<br />\n"; 
       $content = $items->children('http://purl.org/rss/1.0/modules/content/');
       echo "<br /> ".$content->encoded."\n";  
       echo "<br />\n"; 
    }


    so kommt man an <content:encoded> Inhalt :)

  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!