Probleme addChild SimpleXMLElement

Par vavoir, il y a 10 ans


Bonsoir l'idée est là mais pas la syntaxe ^^

foreach ($list_new as $key=>$value) { $xml->body->addChild('article', $xml->body->article->addChild($key,$value)); } }

Concrètement J'ai un tabeau:

array (size=2) 0 => object(stdClass)[3] public 'id' => string '...' (length=1) public 'author' => string '... (length=4) public 'title' => string '...' (length=14) public 'slug' => string '... (length=14) public 'date_inline' => string '...' (length=10) public 'img_name' => string '...' (length=26) public 'preview' => string '' (length=0) 1 => object(stdClass)[3] public 'id' => string '...' (length=1) public 'author' => string '... (length=4) public 'title' => string '...' (length=14) public 'slug' => string '... (length=14) public 'date_inline' => string '...' (length=10) public 'img_name' => string '...' (length=26) public 'preview' => string '' (length=0)

Que je souhaite stoker provisoirement dans un fichier xml sous cette forme:

<body> <article> <id>...</id> <author>...</author> <title>...</title> <slug>...</slug> <date_inline>...</date_inline> <img_name>...</img_name> <preview>...</preview> </article> <article> <id>...</id> <author>...</author> <title>...</title> <slug>...</slug> <date_inline>...</date_inline> <img_name>...</img_name> <preview>...</preview> </article> </body>

Sa marche presque bien pour un sauf que sa génére des erreur normal ^^

Warning: SimpleXMLElement::addChild() expects parameter 2 to be string, object given in on line

11 réponses

Sankaman, il y a 10 ans

Dans ta boucle for, la variable $value ne serait pas un objet par hasard ? Car si c'est le cas, la fonction demande un String, il te faudrait alors créer une méthode toString() par exemple afin de pouvoir récupérer cet ta liste de news sous forme de String :)

vavoir, il y a 10 ans

@Sankaman
il n'y a pas de boucle for. Se qui est mon avis une erreur je pense qu'il faut que j'utilise une boucle for.
Non $value n’est pas un objet elle fait référence au contenu de $key qui appartient au tableau $list_new
Quoi qu’il arrive je suis obligé de renvoyer un string mais il peut être vide :)

Sankaman, il y a 10 ans

foreach est une boucle for (mais seulement pour les tableaux et objets) ^^
Sinon tu peux faire un var_dump de $value ?

vavoir, il y a 10 ans

Pour le moment j'arrive grâce ce code à créé mes deux enfants article

foreach ($list_new as $list_new) { $xml->body->addChild('article', ''); } Maintenant il faut les remplirs ^^
vavoir, il y a 10 ans

je dézoom ^^

$list_new = $pdo->prepare("SELECT id, author, title, slug, date_inline, img_name, preview FROM articles WHERE inline=1 "); $list_new->execute(); if($list_new) { $list_new = $list_new->fetchAll(); foreach ($list_new as $key=>$value) { $xml->body->addChild('article', ''); } $xml->asXML($file_xml); foreach($list_new as $list_new){ foreach ($list_new as $key => $value) { $xml->body->article->addChild("id", "lol"); } } $xml->asXML($file_xml); }
Sankaman, il y a 10 ans

D'après ton code je pense que $list_new est un tableau de tableau ou un tableau d'objet ^^
Pourrais-tu faire un var_dump($value) à l'intérieur du premier foreach stp ? :)

vavoir, il y a 10 ans
object(stdClass)[3] public 'id' => string '...' (length=1) public 'author' => string '...' (length=4) public 'title' => string '...' (length=14) public 'slug' => string '...' (length=14) public 'date_inline' => string '...' (length=10) public 'img_name' => string '...' (length=26) public 'preview' => string '' (length=0) object(stdClass)[3] public 'id' => string '...' (length=1) public 'author' => string '...' (length=4) public 'title' => string '...' (length=14) public 'slug' => string '...' (length=14) public 'date_inline' => string '...' (length=10) public 'img_name' => string '...' (length=26) public 'preview' => string '' (length=0)
Sankaman, il y a 10 ans

Du coup $value est bien un objet ;)
Tu pourrais faire quelque chose du style

$news = $value->author; $news .= $value->title; // Tu rajoutes les donnees que tu veux garder et tu formattes le texte comme tu le veux

Puis tu ajouteras $news (Un string donc) a la place de $value qui est un objet ;)

vavoir, il y a 10 ans

On parle bien de PHP ?
Car il me semble que "var" c'est du javascript ?

vavoir, il y a 10 ans

En boufant la doc PHP, hum c'est bon, je me rencontre que je n'utilise peut être pas la bonne méthode.
DOM semble plus "approprié" ?

vavoir, il y a 10 ans

Finalement je vais m’orienter vers du JSON et même me créé une petit CLASS pour gérer tout sa :D