Discussion: Array to XML

  1. #1
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    3 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 517
    Points : 7 476
    Points
    7 476

    Par défaut Array to XML

    Bonjour.

    suite à de nombreuses interventions dans les forums AJAX traitant de pb de XML en javascript, alors qu'en fait il s'agit de génération de XML en utilisant des concaténations de chaine en php, J'ai excrit un petit exemple php pour générer un XML à partir d'un tableau php

    les choix retenus sont
    si le tableau contient une seule entrée sans clef ($a[0]) la racine (root) est 'xml'
    si le tableau contient plusieurs entrées la racine est 'xml'

    pour les tableau à index numérique un tag 'item' est créé.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <pre><?php
     //tableau exemple
     $data = array(
        'test' => 'a',
        'integer' => 12,
        'null' => NULL,
        'array' => array(1, 2, 3, 4),
        'obj' => (object) array('a' => 56, 'b' => true, 'f' => 1.5)
     );
     
     //optention de la liste des clefs
     $keys =array_keys($data);
     
     //ajout du tag root si nécessaire
     if (count($data) != 1 || $keys[0] == 0) {  
      $data = array ('xml' => $data);
     }
     
     //juste pour voir ce qu'on va convertir
     print_r($data);
     
     //fonction de convertion
     // ajoute $data à $node dans le document $doc
     function addDatasInNodeOfDoc($data, $node, $doc) {
      foreach($data as $key => $value) {
       //si on a des index numériques 
       if ('integer' == gettype($key)) {
        $key = 'item';
       }
     
       //element null
       if ('NULL' == gettype($value)) {
        $elem = $doc->createElement($key, $value);
       //boolean 
       } elseif ('boolean' == gettype($value)) {
        $elem = $doc->createElement($key, $value);
       //double ou float 
       } elseif ('double' == gettype($value)) {
        $elem = $doc->createElement($key, $value);
       //integer
       } elseif ('integer' == gettype($value)) {
        $elem = $doc->createElement($key, $value);
       //string 
       } elseif ('string' == gettype($value)) {
        $elem = $doc->createElement($key, $value);
       //si on a un objet on traite ses membres 
       } elseif ('object' == gettype($value)) {
        $elem = $doc->createElement($key);
        addDatasInNodeOfDoc(get_object_vars($value), $elem, $doc);
       //si c'est un tableau
       } elseif ('array' == gettype($value)) {{
        $elem = $doc->createElement($key);
        addDatasInNodeOfDoc($value, $elem, $doc);
       }
       //on accroche le nouvel element au neud
       $node->appendChild($elem);
      }
      return $node;
     }
     
     //on crée le document
     $doc = new DOMDocument('1.0');
     //on ajoute toutes les donnée au document
     addDatasInNodeOfDoc($data, $doc, $doc);
     
     //affichage du xml
     echo htmlentities($doc->saveXML());
     
    ?></pre>

    resultat :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Array
    (
        [xml] => Array
            (
                [test] => a
                [integer] => 12
                [null] => 
                [array] => Array
                    (
                        [0] => 1
                        [1] => 2
                        [2] => 3
                        [3] => 4
                    )
     
                [obj] => stdClass Object
                    (
                        [a] => 56
                        [b] => 1
                        [f] => 1.5
                    )
     
            )
     
    )
    <?xml version="1.0"?>
    <xml>
      <test>a</test>
      <integer>12</integer>
      <null></null>
      <array>
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
      </array>
      <obj>
        <a>56</a>
        <b>1</b>
        <f>1.5</f>
      </obj>
    </xml>

    Attention pas de pretty print

    A+JYT

  2. #2
    Expert Confirmé Sénior

    Inscrit en
    septembre 2010
    Messages
    7 957
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 7 957
    Points : 10 641
    Points
    10 641

    Par défaut

    marche pas avec des clés vides ou numériques,
    pour le pretty print juste faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $doc->formatOutput = true;

  3. #3
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    3 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 517
    Points : 7 476
    Points
    7 476

    Par défaut

    je n'ai fais ça que pour le principe

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       //si on a des index numériques 
       if ('integer' == gettype($key)) {
        $key = 'item';
       }
    je n'a effectivement pas testé le cas ou la clef est ''

    c'est grandement prefectionnable

    A+JYT

Discussions similaires

  1. [PHP 5.4] Transformer le tableau [array] en XML document par DOMDocument
    Par tonton.odilon dans le forum Fichiers
    Réponses: 19
    Dernier message: 13/05/2015, 21h46
  2. script php pour convertir un array en xml
    Par omar24 dans le forum Scripts
    Réponses: 4
    Dernier message: 02/03/2011, 14h22
  3. [XML] Type array dans XML
    Par jambonstar dans le forum Delphi
    Réponses: 1
    Dernier message: 11/10/2006, 14h09
  4. [Tableaux] [Array to XML] retouche sur ma fonction
    Par Fabouney dans le forum Fonctions
    Réponses: 2
    Dernier message: 28/09/2006, 10h47
  5. mettre les valeurs XML dans un array
    Par yodark dans le forum XML
    Réponses: 11
    Dernier message: 05/01/2006, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo