Page 1 sur 1
Parse error
Posté : 15 oct. 2013, 12:35
par Aldo455
Bonjour,
Un truc tout bête j'obtiens une erreur :
$feedElements[$key]->itemDescription = $item->content:encoded;
le : n'est pas apprécié
J'obtiens comme erreur Parse error: syntax error, unexpected ':'
Merci de votre aide
Aldo
Re: utilisation de :
Posté : 15 oct. 2013, 12:50
par damien_55
Salut,
tu cherches a parser quoi? c'est quoi l'expression d'origine? A quel élément souhaites tu accéder?
Effectivement, tes ":" te génère une erreur.
Vois la doc: simple_xml par exemple.
Re: utilisation de :
Posté : 15 oct. 2013, 13:27
par xTG
Pour y voir un peu plus clair sur la façon d'accéder à l'élément :
var_dump($item->content);
Re: Parse error
Posté : 15 oct. 2013, 13:56
par moogli
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP !", "Aidez-moi", "J'ai un problème", "Ça marche pas",...
n'apportent rien à la compréhension de ta demande.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide. 
Merci de prendre le temps de lire les règlements.
Re: Parse error
Posté : 15 oct. 2013, 14:31
par Aldo455
Bonjour
Désolé je me suis mal exprimé
Je cherche à récupérer un flux rss en xml pour un site internet.
Au départ j'avais bien un item description correspondant à
$feedElements[$key]->itemDescription = $item->description;
Mais l'item description a été changé par content:encoded
d'où le remplacement de variable :
$feedElements[$key]->itemDescription = $item->content:encoded;
J'ai essayé plusieurs trucs du type
$feedElements[$key]->itemDescription = $item->content\:encoded;
$feedElements[$key]->itemDescription = $item->content.':'.encoded;
Mais j'ai toujours une erreur
Merci
Aldo
Re: Parse error
Posté : 15 oct. 2013, 15:03
par damien_55
comme ceci peut etre: $item['content']['encoded']
Re: Parse error
Posté : 15 oct. 2013, 15:06
par damien_55
Si ça ne marche pas, je me tournerai plus vers cette solution à adapter à ton besoin:
$url = 'put_your_feed_URL';
$rss = new DOMDocument();
$rss->load($url);
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
$item = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'content' => $node->getElementsByTagName('encoded')->item(0)->nodeValue
);
array_push($feed, $item);
}
Google est ton ami

Re: Parse error
Posté : 15 oct. 2013, 16:15
par Aldo455
Bonjour
Merci de vos réponses
mais $item['content']['encoded'] ne fonctionne pas il me manque ":"
Mon libellé est bien "content:encoded"
Voici mon code Xml pour cet item:
<content:encoded>
<![CDATA[<p>contenu à afficher</p>]]>
</content:encoded>
Je pense que c'est une erreur de syntaxe avec ce maudit ":" dans $feedElements[$key]->itemDescription = $item->content:encoded;
Merci de votre patience
Aldo
Re: Parse error
Posté : 15 oct. 2013, 16:25
par damien_55
Re,
En fait tu ne peux pas parser avec ce ":" dans ton expression $item->content:encoded, c'est pas possible. ça va forcément générer une erreur.
Soit tu choisis de parser en accédant aux "tagname" tel que c'est présenté dans la deuxième solution.
soit une troisième solution est de charger ton xml, faire un str_replace sur tes deux balise: <content:encoded> en remplaçant par exemple par <description>. et tu parses le résultat sorti.
Re: Parse error
Posté : 15 oct. 2013, 17:34
par yann18
il faut déjà récupérer l'espace de nom, avec la fonction
getnamespaces(), qui définit la balise encoded.
$file = file_get_contents("http://site.com.xml");
$xml = new SimpleXmlElement($file);
$namespaces = $xml->getNamespaces(true);
var_dump($xml->children($namespaces['content']));//tous les enfants de la racine
Par contre sans connaissance de ton document xml il m'est difficile d'aller plus loin.
Re: Parse error
Posté : 15 oct. 2013, 18:25
par yann18
autre méthode pour récupérer une balise appartenant à un namespace donné.
dans le doc xml
content est le préfixe attribué à l'espace de nom
http://url-du-namespace (xmlns:content="http://url-du-namespace").Pour recuperer la balise
encoded préfixé par content:
//on récupère le namespace
$child = $item->children('http://url-du-namespace');//à remplacer par l'url du namespace se trouvant dans le document xml
$feedElements[$key]->itemDescription = $child->encoded; //balise encoded