Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Array to XML

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 117
    Points : 6 768
    Points
    6 768

    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 :
    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 :
    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
    Modérateur

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

    Par défaut

    marche pas avec des clés vides ou numériques,
    pour le pretty print juste faire
    Code :
    $doc->formatOutput = true;

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 117
    Points : 6 768
    Points
    6 768

    Par défaut

    je n'ai fais ça que pour le principe

    mais
    Code :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •