PHP RSS-Feed mit mehreren Kategorien auslesen

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

StephanBo

Mitglied
28 Januar 2012
175
0
16
Ein Item eines RSS-Feed hat mehrere Kategorien, die aber namentlich nicht verschieden sind (category):

<category>Cat 1</category>
<category>Cat 2</category>
<category>Cat 3</category>


Ich nutze diesen Code um den RSS-Feed auszulsen:
PHP:
...
// Items holen
foreach($xml->channel[0]->item as $item) {

    $out[] = array(
        'category'     => (string) $item->category,
        'title'        => (string) $item->title,
    );
}

// Eintraege ausgeben
foreach ($out as $value) {
    echo $value['title'].'</br>';
    echo $value['category'].'</br></br>';
}

Das Problem ist, dass ich hiermit nur die Werte aus der obersten Category erhalte. Wie bekomme ich aber die nachfolgenden Categories auch angezeigt, wenn diese nicht eindeutig definiert sind?
 
Zuletzt bearbeitet von einem Moderator:

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
Kannst du die XML Struktur von einem Item denn zeigen wo mehrere Category drin sind?
 

Tronjer

Senior HTML'ler
8 Oktober 2010
5.238
483
83
Berlin
Ich bin JS Entwickler und kann zu PHP wenig sagen, aber der Ansatz ist der gleiche. Den Feed in JSON konvertieren und über die Properties des Objekts iterieren. Entsprechende Plugins gibt es für Scriptsprachen, und deren Frameworks.
 

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
Mit dem SimpleXML Object geht das schon, da muss man den Feed nicht in JSON umkonvertieren. Man müsste sich nur mal öfter die Ausgabe des Objektes anschauen. Denn "$item->category" ist ein Array bzw. ein SimpleXMLElement Object. Es gibt nun zwei Varianten:
- erste Variante: man arbeitet mit dem Objekt
- zweite Variante: man castet es als Array

PHP:
foreach($xml->channel[0]->item as $item)
{
   $cat = array();
  
   // erste variante
   foreach($item->category as $category)
   {
       $cat[] = (string) $category;
   }
  
   // zweite variante
   foreach((array) $item->category as $category)
   {
       $cat[] = $category;
   }
  
   $out[] = array(
       'category' => $cat,
         'title' => (string) $item->title,
   );
}
 
Werbung: