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 :wink:

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