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


vavoir
Auteur
Réponse acceptée

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

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
Auteur

@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 :)

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

vavoir
Auteur

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
Auteur

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);
                }

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
Auteur
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)

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
Auteur

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

vavoir
Auteur

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é" ?