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

Langage PHP Discussion :

Transformation d un xml en array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Par défaut Transformation d un xml en array
    Bonjour a tous,

    je suis plutot debutant en programmation php , et j ai besoin de transformer un xml que je recupere en un tableau .
    Je m explique

    je recoit un xml de cette sorte :

    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
    43
    44
    45
    46
    47
    <RESULT>
             <GRP ID="IN">
                <FLD NAME="ECODET" TYPE="Char">
                   T40
                </FLD>
                <FLD NAME="EFICHET" TYPE="Char">
                   TV20121200001
                </FLD>
                <FLD NAME="ESOCVT" TYPE="Char">
                   SPC
                </FLD>
                <FLD NAME="ECLIENT" TYPE="Char"/>
             </GRP>
             <GRP ID="OUTMES">
                <FLD NAME="SGERR" TYPE="Integer">
                   0
                </FLD>
                <FLD NAME="SGMESSAGE" TYPE="Char">
                   Pas d'erreur
                </FLD>
             </GRP>
             <TAB DIM="5" ID="OUTTABLE" SIZE="3">
                <LIN NUM="1">
                   <FLD NAME="SCHPCOL" TYPE="Char">
                      CPY
                   </FLD>
                   <FLD NAME="SCHPLIB" TYPE="Char">
                      Société vente
                   </FLD>
                </LIN>
                <LIN NUM="2">
                   <FLD NAME="SCHPCOL" TYPE="Char">
                      BPCNUM
                   </FLD>
                   <FLD NAME="SCHPLIB" TYPE="Char">
                      Client
                   </FLD>
                </LIN>
                <LIN NUM="3">
                   <FLD NAME="SCHPCOL" TYPE="Char">
                      ITMREF
                   </FLD>
                   <FLD NAME="SCHPLIB" TYPE="Char">
                      Article
                   </FLD>
                </LIN>
             </TAB>

    et j aimerai bien pouvoir le convertir en un tableau de ce type la

    IN => array(
        ECODET => T40,
        EFICHET => TV20......,
        ESOCVT => MAR
        ECLIENT => ...
    )
    OUTMES => array(
        SGERR => 0,
        SGMESSAGE => ...
    )
    OUTTABLE => array(
        0 => array(
             SCHPCOL => CPY,
             SCHPLIB => ...
        )
        1 => array(
             SCHPCOL => CPY,
             SCHPLIB => ...
        ).......
    mais je n y arrive pas
    j ai d'abord converti le xml en un array qui me donne une structure comme ca
    Array(
        [RESULT] => Array(
            [GRP] => Array(
                [0] => Array(
                    [@ID] => IN
                    [FLD] => Array(
                        [0] => Array(
                            [@NAME] => ECODET
                            [@TYPE] => Char
                            [$] => T10
                        )
                        [1] => Array(
                            [@NAME] => EFICHET
                            [@TYPE] => Char
                            [$] => TV20140600004
                        )
                        [2] => Array(
                            [@NAME] => ESOCVT
                            [@TYPE] => Char
                            [$] => MAR
                        )
                        [3] => Array(
                            [@NAME] => ECLIENT
                            [@TYPE] => Char
                        )
                    )
                )
    mais je n arrive pas a obtenir ce que je veut

    si vous pouviez m aider ce serait cool

    merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par kuzbedoo Voir le message
    j ai d'abord converti le xml en un array
    Et comment as-tu fait ça ? Voir le code nous aiderait à t'aider.

    Au passage, le mieux pour lire du XML, c'est quand même d'utiliser un parser XML, genre SimpleXML ou DomDocument.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Par défaut
    j ai fait pas mal de modif mais j ai fait comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = simplexml_load_string($xmlEntree,'SimpleXMLElement', LIBXML_NOCDATA);
    $t = xmlToArray($xml);
    ce qui me donne le tableau
    Code : 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
    Array
    (
        [RESULT] => Array
            (
                [GRP] => Array
                    (
                        [0] => Array
                            (
                                [@ID] => IN
                                [FLD] => Array
                                    (
                                        [0] => Array
                                            (
                                                [@NAME] => ECODET
                                                [@TYPE] => Char
                                                [$] => T10
                                            )
     
                                        [1] => Array
                                            (
                                                [@NAME] => EFICHET
                                                [@TYPE] => Char
                                                [$] => TV20140600004
                                            )
     
                                        [2] => Array
                                            (
                                                [@NAME] => ESOCVT
                                                [@TYPE] => Char
                                                [$] => MAR
                                            )
     
                                        [3] => Array
                                            (
                                                [@NAME] => ECLIENT
                                                [@TYPE] => Char
                                            )
     
                                    )
     
                            )
    apres je pensait faire une fonction recursive mais j y arrive pas
    j ai fais tellement de modif que je peut pas vous montrer car ca fait plus rien

    mais en gros j ai fait un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function test($array){
      $res = array();
     
      foreach ($array as $k=> $v) {
        if ($k === '@ID') {
          $res[$v] = $v;
        }
     
        if (is_array($v)) {
          test($v);
        }
      }
      return $array; 
    }
    mais il manque toute la partie du traitement après avoir trouver l ID du xml

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Par défaut
    BOn j arrive a quelque chose de pas trop mal,

    Code : 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
    Array
    (
        [IN] => Array
            (
                [0] => Array
                    (
                        [ECODET] => T10
                    )
     
                [1] => Array
                    (
                        [EFICHET] => TV20140600004
                    )
     
                [2] => Array
                    (
                        [ESOCVT] => MAR
                    )
     
                [3] => Array
                    (
                        [ECLIENT] => 
                    )
     
            )
     
        [OUTMES] => Array
            (
                [0] => Array
                    (
                        [SGERR] => 0
                    )
     
                [1] => Array
                    (
                        [SGMESSAGE] => Pas d'erreur
                    )
     
            )
     
        [OUTHEAD] => Array
            (
                [0] => Array
                    (
                        [SDEVISE] => EUR
                    )
     
                [1] => Array
                    (
                        [SACTIF] => 2
                    )
    mais maintenant j aimerai savoir si c'est possible de supprimer le niveau indexé et de me retrouver avec un tableau associatif
    Code : 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
    Array
    (
        [IN] => Array
            (
                 [ECODET] => T10
                 [EFICHET] => TV20140600004
                 [ESOCVT] => MAR
                 [ECLIENT] => ''
            )
     
        [OUTMES] => Array
            (
                 [SGERR] => 0
                 [SGMESSAGE] => Pas d'erreur
     
     
            )
     
        [OUTHEAD] => Array
            (
                 [SDEVISE] => EUR
                 [SACTIF] => 2
             )

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    tu dois avoir un truc du genre $variable= array(); ou $variable[] = array(); en trop quelque part.
    On peut voir la dernière version du code ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Par défaut
    oui bien sur
    Code : 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
    foreach ($arr['RESULT']['GRP'] as $k => $v) {
        foreach ($v as $ke => $val) {
          if ($ke === '@ID') {
            $temp = $val;
            $tab[$temp] = array();
          }
     
          if ($ke === 'FLD') {
            foreach ($val as $key => $value) {
              if (isset($value['$'])) {
                $tab[$temp][] = [$value['@NAME'] => $value['$']];
              }else{
                $tab[$temp][] = [$value['@NAME'] =>'null'];
              }
     
            }
          }
     
        }
      }
    desolé c codé salement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer un fichier XML en SVG
    Par LEK dans le forum ASP
    Réponses: 2
    Dernier message: 05/07/2005, 21h52
  2. Réponses: 4
    Dernier message: 23/06/2005, 12h44
  3. [XSLT][XSD>XML]transformer xsd en xml avec xslt
    Par émile-henri dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/06/2005, 15h06
  4. [XSL] Transformation de document xml
    Par youbyoub dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2005, 16h13
  5. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45

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