Parser du xml pour faire un lecteur RSS

shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 13 nov. 2008 à 11:59
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 16 nov. 2008 à 21:42
Bonjour,

je suis en train de développer un portail et j'aurai besoin de réaliser ma propre classe pour lire des flux RSS, actuellement j'ai trouvé une alternative avec Simple_XML mais bon cela ne me convient pas en tant que développeur, j'aimerai arriver a creuser dans le fonctionnement du code quand on parse du xml plutot que d'utiliser du managé (qui en soit marche très bien pour ce qu'on lui demande de faire).
Voici actuellement ma méthode en utilisant DOMdocument(); mais cela me renvoi une erreur, (pourtant j'ai beau regarder le peu de source sur le sujet ca me semble pas si horrible que ca :D

Erreur retournée:
Fatal error: Call to a member function getElementsByTagName() on a non-object in C:\Program Files\EasyPHP 2.0b1\www\schoolmate\models\CDrssReader.class.php on line 44

Methode:
public function manualReadXML($url){
      // on affecte l'url et le message de test
      $this->url = $url;
      $ret = 'Test RSS:

';

      // on récupère le contenu du flux
      $this->getContent($url);

      // on initialise DOMDocument pour parser le flux
      $dom = new DOMDocument();
      $dom->load($this->content);

      // puis dans le premier <channel>
      $channels = $dom->getElementsByTagName('channel')->item(0);

      // puis on liste les balise
      $dataset = $channels->getElementsByTagName('item');  // c'est elle la ligne 44 ^^

      // pour chaque on récupère son <title> et son <link>
      for($i = 0; $i < 5; $i++){
            $item = $dataset->item($i);
            $title = $item->getElementsByTagName("title")->item(0)->nodeValue;
            $link = $item->getElementsByTagName("link")->item(0)->nodeValue;

            // on retourne cela sous forme de lien
            $ret .= '<li class="feed">['.$link.' '.$title.']</li>';
      }

    $ret .= '

      return $ret;
  }

2 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 nov. 2008 à 11:48
Hello,

DOMDocument::getElementsByTagName() renvoie une DOMNodeList.
DOMNodeList::item() renvoie un DOMNode.
Un node, c'est un noeud, PAS l'élément.
DOMElement étend DOMNode, pas l'inverse.
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
16 nov. 2008 à 21:42
Ouai j'comprend a peu près l'erreur mais du coup j'peux faire comment pour récupérer l'élément a chaque fois
0
Rejoignez-nous