Page 1 sur 1

Parser du XML en PHP

Publié : 22 juin 2006, 14:26
par Lilive
Bonjour,
Je souhaite parser du XML de type RSS 2 en PHP avec le code suivant (récupéré sur comscripts) :

Code : Tout sélectionner

    $fp = @fopen($site,"r");
    while(!@feof($fp)) $raw .= @fgets($fp, 4096);
    fclose($fp);
    if( eregi("<item>(.*)</item>", $raw, $rawitems ) ) {
     $items = explode("<item>", $rawitems[0]);
     $limite=20; // nombre d'items à afficher
     if(count($items)>$limite){$qtte=$limite;}else{$qtte=count($items);}
     for( $i = 0; $i < $qtte-1; $i++ ) {
      eregi("<title>(.*)</title>",$items[$i+1], $title );
      eregi("<link>(.*)</link>",$items[$i+1], $link );
      eregi("<description>(.*)</description>",$items[$i+1], $descr );
      print("<div id='acturss'><a href='$link[1]' target='_blank'>$title[1]</a><br>$descr[1]</div>");
     }
    }
ça fonctionne plutôt bien sauf dans un cas : quand entre les balises <descripteur> le contenu est mis en <![CDATA[...]]> il ne récupère le message que à partir du premier > trouvé jusqu'à ]]>
N'étant pas vraiment spécialiste dans le domaine de l'XML et du parsing, j'avoue avoir du mal à comprendre l'erreur... si quelqu'un à une idée... :?

Publié : 22 juin 2006, 19:06
par Benoit
Tu utilises quelle version de PHP ? Tu sais qu'il existe des fonctions pour manipuler le XML directement ?

SimpleXML en PHP5 (vraiment simple et rapide !) ou DOM (si tu connais déjà le DOM, mais c'est plus lent)

Si tu as un vieux PHP4 tu peux au moins espérer avoir l'ancien DOM XML ou, à défaut, un analyseur séquentiel.

Franchement, évite à tout prix de manipuler le XML toi-même via des expressions régulières.

Publié : 22 juin 2006, 19:32
par Lilive
Malheureusement, c'est ce que je suis en train de faire... Je ne tiens vraiment pas à me mettre à un autre langage. Je ne connais de DOM que le nom...
Je suis chez Free et ils semblent en être à la version 5 de php, mais l'hébergement chez free est temporaire le temps de faire le site car il sera ensuite hébergé sur un serveur du CNRS dont je ne connais pas encore la version de PHP...
En tout cas, merci du conseil, je vais essayer de trouver une autre solution en espérant que ça ne me prenne pas trop de temps...

Publié : 23 juin 2006, 10:08
par Lilive
Après vérification : Free n'en est qu'à la version 4 de PHP et n'autorise donc pas simpleXML... J'ai vu qu'il existait des fonctions DOM XML (apparemment installée chez Free) : pensez-vous que je puisse m'en tirer avec une fonction du genre XMLtree ?