IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Array to XML


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    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 éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    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 éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    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 Langage
    Réponses: 19
    Dernier message: 13/05/2015, 21h46
  2. script php pour convertir un array en xml
    Par omar24 dans le forum EDI, CMS, Outils, Scripts et API
    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 Langage
    Réponses: 2
    Dernier message: 28/09/2006, 10h47
  5. [XML] mettre les valeurs XML dans un array
    Par yodark dans le forum Bibliothèques et frameworks
    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