Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1748 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  'getAttribute' tout bête, mais qui ne passe pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

'getAttribute' tout bête, mais qui ne passe pas

n°2038051
kraken pol​aire
11/11 piétienement
Posté le 24-11-2010 à 11:58:33  profilanswer
 

Bonjour :)
 
J'essaie de récupérer une balise enclosure dans un fichier rss. Cette balise étant enfant directe de la balise channel.
 
Dans mon fichier php j'essaie de construire la page, mais avant même de pouvoir faire ça, lors de la déclaration des variables de récupération
j'ai une fatal error, Call to a member function getAttribute() on a non-object.
Et celà à cause de la 3ème ligne de ce bout de code. Pourtant j'ai l'impression que le chemin pour récup l'attribut "url" est bon. non?
 

Code :
  1. $tnl = $item->getElementsByTagName("enclosure" );
  2. $enclosure = $tnl->item(0);
  3. $iurl = $enclosure->getAttribute("url" );

mood
Publicité
Posté le 24-11-2010 à 11:58:33  profilanswer
 

n°2038056
skeye
Posté le 24-11-2010 à 12:08:20  profilanswer
 

var_dump($enclosure) donne quoi?


---------------
Can't buy what I want because it's free -
n°2038243
kraken pol​aire
11/11 piétienement
Posté le 25-11-2010 à 04:22:06  profilanswer
 

comme je suis plutot noob en php, j'ai fait quelques recherches sur var_dump ce qui me balance quasi toujours sa définition absolue. et forcement ça m'aide pas. mais je vais creuser, si je peux avoir des réponses avec ça. :) et j ferai du feed ou du need bientot

n°2038325
rufo
Pas me confondre avec Lycos!
Posté le 25-11-2010 à 10:49:29  profilanswer
 

Par curiosité, t'utilises quelle lib pour parser ton xml?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2038616
kraken pol​aire
11/11 piétienement
Posté le 26-11-2010 à 11:21:38  profilanswer
 

rsslib.php que j'ai eu ici :
http://www.scriptol.fr/rss/lecteur-rss.php

n°2038620
kraken pol​aire
11/11 piétienement
Posté le 26-11-2010 à 11:36:31  profilanswer
 

Bon et bien var_dump($enclosure) me donne ça :
object(DOMElement)#7 (0) { } NULL
 
Voilà comment je l'ai placé, j pense pas avoir fait de bêtise :
$tnl = $item->getElementsByTagName("enclosure" );
$enclosure = $tnl->item(0);
var_dump($enclosure);
 
j post quand même le bout de xml sur lequel je voudrais que la variable fasse sa recup :

Code :
  1. <item>
  2. <title>Online Survey for Web makers</title>
  3.    <link>http://uww.nbonlien.com</link>
  4.    <pubDate>Fri, 05 nov 2010 11:02:00 GMT</pubDate>
  5.    <description><![CDATA[This article form Eric Meyer will be use to make a world map of people who are working on the web or for it.<br />It will take you 10 min to fill in the form, and you could appreciate a very well done one.]]></description>
  6.    <enclosure url="http://images/blogImg/i-took-the-2010-survey.gif" length="1800" type="image/jpeg"/>
  7. </item>


n°2039047
kraken pol​aire
11/11 piétienement
Posté le 29-11-2010 à 15:23:43  profilanswer
 

up please :)

n°2039123
stealth35
Posté le 29-11-2010 à 17:52:29  profilanswer
 

mais $item c'est quoi a la base ?

n°2039218
kraken pol​aire
11/11 piétienement
Posté le 30-11-2010 à 09:54:26  profilanswer
 

$item c'est ça :

Code :
  1. $items = $channel->getElementsByTagName("item" );


Mais l'erreur n'est pas là puisque juste au dessus de là où la fatal error se déclenche j'ai ça qui récup sans prob ce qui est contenu dans la balise <title>

Code :
  1. $tnl = $item->getElementsByTagName("title" );
  2. $tnl = $tnl->item(0);
  3. $title = $tnl->firstChild->textContent;


Et ça marche très bien aussi pour les balises <link>, <description>, <pubdate>.

n°2040439
smaragdus
whores, drugs & J.S. Bach
Posté le 07-12-2010 à 10:41:19  profilanswer
 

Ouhla, c'est n'importe quoi cette utilisation de getElementsByTagName
 
Je te conseille urgemment d'utiliser les XPath avec DOMXpath car getElementsByTagName ne suit pas la hierarchie de l'arbre donc c'est surement pour ça que ça bug.


Message édité par smaragdus le 07-12-2010 à 10:42:29
mood
Publicité
Posté le 07-12-2010 à 10:41:19  profilanswer
 

n°2041337
kraken pol​aire
11/11 piétienement
Posté le 10-12-2010 à 14:41:01  profilanswer
 

Merci pour l'aide smaragdus.
Je viens juste de voir ta réponse et entre temps n'ayant pu résoudre le problème, je me suis penché vers une autre méthode pour afficher mon xml.
SimpleXML utilise la méthode cURL qu'on m'a conseillé lorsque j'avais demandé pourquoi rien ne passait une fois le site en ligne.
Avec ça, tout est niquel en local (je récupère balises et attributs sans prob), mais chez OVH j'ai une jolie erreur :

Code :
  1. Fatal error: Cannot instantiate non-existent class: simplexmlelement


Après qq recherches, j'ai cru comprendre qu'il avait des problèmes parce que ça utilisait le php5. Mais renommer mes fichiers .php en .php5 n'a rien changé.
Voila le code, mais j'ai plus l'impression que c'est un truc relatif à la configuration de php. Mais bon ça me dépasse encore le php ^^

Code :
  1. <?php
  2. $curl_hd = curl_init('http://www.maxiii.me/feedHomeBlog.xml');
  3. curl_setopt($curl_hd, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($curl_hd, CURLOPT_HEADER, 0);
  5. $rss = curl_exec($curl_hd);
  6. curl_close($curl_hd);
  7. function parse_rss($doc)
  8. {
  9.     foreach($doc->channel->item as $item)
  10.                {
  11.  echo $item->title . "\n";
  12.                 echo $item->pubDate . "\n";
  13.  echo $item->description . "\n";
  14.  foreach($item->enclosure as $enc){
  15.   echo "<a href='".$item->link."'><img src='".$enc['url']."' /></a>" . "\n";
  16.  }
  17.     } 
  18. function parse_atom($doc)
  19. {
  20.     foreach($doc->entry as $item)
  21.     {
  22.         echo $item->title . "\n";
  23.         echo $item->link->attributes() . "\n";
  24.         echo $item->content . "\n\n";
  25.     } 
  26. }
  27. $rss_doc = new SimpleXmlElement($rss, LIBXML_NOCDATA);
  28. if(isset($rss_doc->channel))
  29. {
  30.     parse_rss($rss_doc);
  31. elseif(isset($rss_doc->entry))
  32. {
  33.     parse_atom($rss_doc);
  34. }
  35. ?>


 
Merci d'avance :) j'en profite que qq'un passe par là. Car je ne suis toujours pas sorti du problème

n°2041775
kraken pol​aire
11/11 piétienement
Posté le 13-12-2010 à 13:27:39  profilanswer
 

Bon et bien, j'ai trouvé. simplexml nécessite php5 pour fonctionner et chez OVH c'est la version 4.4.x

n°2042006
kraken pol​aire
11/11 piétienement
Posté le 14-12-2010 à 13:41:09  profilanswer
 

J'ai envoyé un message au support d'OVH qui m'a r'pondu très rapidement :
 
> Vous pouvez mettre à jour la version de votre php vers la php5.
>  
> Pour changer la version de php qui va exécuter un fichier .php, il suffit de créer un .htaccess dans le répertoire de votre site. Avec le bloc note de Windows ou tout autre éditeur de texte, tapez :
>  
> SetEnv PHP_VER 5
>  
> Enregistrez ce fichier et uploadez le sur votre ftp dans le répertoire concerné et renommez le en .htaccess. Les fichiers .php seront alors exécutés avec la version 5 de php.
>  
> http://guides.ovh.com/Php5ChezOvh
 
Et là tout roule :D enfin....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  'getAttribute' tout bête, mais qui ne passe pas

 

Sujets relatifs
paramètre passé à __str__ [résolu]script php qui envoie le mot de passe et l'identifiant dans l'email
protéger une page avec un mot de passe?Calculer le temps passé depuis la dernière utilisation du PC
[struts] question bête sur actionredéfinition du mot de passe d'un utilisateur
[VBS] passé d'une macro à ...autoitscript login-mot de passe (noob inside)
[LDAP] Changer mot de passe Active Directory via PHPchaine avec <br> qui ne passe pas par _GET
Plus de sujets relatifs à : 'getAttribute' tout bête, mais qui ne passe pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR