Parse error

Aldo455
Invité n'ayant pas de compte PHPfrance

15 oct. 2013, 12:35

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
Modifié en dernier par moogli le 15 oct. 2013, 13:55, modifié 1 fois.
Raison : Correction titre

Mammouth du PHP | 504 Messages

15 oct. 2013, 12:50

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.

ViPHP
xTG
ViPHP | 7331 Messages

15 oct. 2013, 13:27

Pour y voir un peu plus clair sur la façon d'accéder à l'élément :
var_dump($item->content);

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 oct. 2013, 13:56

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.
Il en faut peu pour être heureux ......

Aldo455
Invité n'ayant pas de compte PHPfrance

15 oct. 2013, 14:31

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

Mammouth du PHP | 504 Messages

15 oct. 2013, 15:03

comme ceci peut etre: $item['content']['encoded']

Mammouth du PHP | 504 Messages

15 oct. 2013, 15:06

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:

Aldo455
Invité n'ayant pas de compte PHPfrance

15 oct. 2013, 16:15

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

Mammouth du PHP | 504 Messages

15 oct. 2013, 16:25

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.

Mammouth du PHP | 571 Messages

15 oct. 2013, 17:34

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.

Mammouth du PHP | 571 Messages

15 oct. 2013, 18:25

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