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

Bibliothèques et frameworks PHP Discussion :

[DOM XML] Récupérer Données XML imbriquées


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 50
    Points
    50
    Par défaut [DOM XML] Récupérer Données XML imbriquées
    Bonjour,

    Je dois lire un fichier XML, j'ai utilisé les fonctions suivantes.
    Mon problème est que je maitrise pas le langage objet et que la présence des différentes imbrication de type stdClass Object.

    Je me retrouve avec 2 erreurs :
    - Invalid argument supplied for foreach() in D:\Sites\Portail-ADM\test_xml.php
    - Object of class stdClass could not be converted to string

    Si quelqu'un peut m'aider, un grand merci par avance.

    Mon but est de récupérer les clefs et les valeurs dans un tableau simple dans le but de les insérer en base de données.


    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    function fileToObject($fileName) {
     
        // création du nouvel objet document
        $dom = new DomDocument();
     
        // chargement à partir du fichier
        $dom->load($fileName);
     
        // validation à partir de la DTD référencée dans le document.
        // En cas d'erreur, on ne va pas plus loin
       /* if (!@$dom->validate()) {
          return false;
        }*/
     
        // création de l'objet résultat
        $object = new stdClass();
     
        // on référence l'adresse du fichier source
        $object->source = $fileName;
     
        // on récupère l'élément racine, on le met dans un membre
        // de l'objet nommé "root"
        $root = $dom->documentElement;
        $object->root = new stdClass();
     
        // appel d'une fonction récursive qui traduit l'élément XML
        // et passe la main à ses enfants, en parcourant tout l'arbre XML.
        getElement($root, $object->root);
     
        return $object;
      }
    
    function getElement($dom_element, $object_element) {
    
        //$indice = 0;
     
        // récupération du nom de l'élément
        $object_element->name = $dom_element->nodeName;
     
        // récupération de la valeur CDATA, 
        // en supprimant les espaces de formatage.
        $object_element->textValue = trim($dom_element->firstChild->nodeValue);
     
        // Récupération des attributs
        if ($dom_element->hasAttributes()) {
          $object_element->attributes = array();
            foreach($dom_element->attributes as $attName=>$dom_attribute) {
              $object_element->attributes[$attName] = $dom_attribute->value;
            }
        }
     
        // Récupération des éléments fils, et parcours de l'arbre XML
        // on veut length >1 parce que le premier fils est toujours 
        // le noeud texte
        if ($dom_element->childNodes->length > 1) {
          $object_element->children = array();
    	  
          foreach($dom_element->childNodes as $dom_child) {
            if ($dom_child->nodeType == XML_ELEMENT_NODE) {
              $child_object = new stdClass();
              getElement($dom_child, $child_object);
              array_push($object_element->children, $child_object);
    		  
            }
          }
        }
      }
      
      $tab_fic = fileToObject("test_b3.xml");
    
    foreach($tab_fic as $key => $value ) {
    	echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value . '"<br />'; 
    	foreach($value as $key => $n ) {
    	echo 'Cet élément a pour clé "' . $key2 . '" et pour valeur "' . $n . '"<br />'; 
    	}
      }
    Les données

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    stdClass Object
    (
        [source] => test_b3.xml
        [root] => stdClass Object
            (
                [name] => n4ds:DSN
                [textValue] => 
                [children] => Array
                    (
                        [0] => stdClass Object
                            (
                                [name] => n4ds:S10_G00_00
                                [textValue] => 
                                [children] => Array
                                    (
                                        [0] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_001
                                                [textValue] => GIPMDS
                                            )
     
                                        [1] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_002
                                                [textValue] => Cas17734_DSN mens
                                            )
     
                                        [2] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_003
                                                [textValue] => v99
                                            )
     
                                        [3] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_005
                                                [textValue] => 02
                                            )
     
                                        [4] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_006
                                                [textValue] => P03V01
                                            )
     
                                        [5] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_007
                                                [textValue] => 01
                                            )
     
                                        [6] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_00_008
                                                [textValue] => 01
                                            )
     
                                        [7] => stdClass Object
                                            (
                                                [name] => n4ds:S10_G00_01
                                                [textValue] => 
                                                [children] => Array
                                                    (
                                                        [0] => stdClass Object
                                                            (
                                                                [name] => n4ds:S10_G00_01_001
                                                                [textValue] => 319814711
                                                            )

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    pouvez-vous nous donner le contenu XML qui produit cela ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    voici une partie du fichier.

    merci d'avance pour l'aide

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?xml version="1.0" encoding="UTF-8"?>
    <n4ds:DSN xmlns:n4ds="http://www.cnav.fr/n4ds" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <n4ds:S10_G00_00>
    <n4ds:S10_G00_00_001>GIPMDS</n4ds:S10_G00_00_001>
    <n4ds:S10_G00_00_002>Cas17734_DSN mens</n4ds:S10_G00_00_002>
    <n4ds:S10_G00_00_003>v99</n4ds:S10_G00_00_003>
    <n4ds:S10_G00_00_005>02</n4ds:S10_G00_00_005>
    <n4ds:S10_G00_00_006>P03V01</n4ds:S10_G00_00_006>
    <n4ds:S10_G00_00_007>01</n4ds:S10_G00_00_007>
    <n4ds:S10_G00_00_008>01</n4ds:S10_G00_00_008>
    <n4ds:S10_G00_01>
    <n4ds:S10_G00_01_001>319814711</n4ds:S10_G00_01_001>
    <n4ds:S10_G00_01_002>00010</n4ds:S10_G00_01_002>
    <n4ds:S10_G00_01_003>CAUDRELIER THIERRY</n4ds:S10_G00_01_003>
    <n4ds:S10_G00_01_004>14 rue ferrus</n4ds:S10_G00_01_004>
    <n4ds:S10_G00_01_006>paris</n4ds:S10_G00_01_006>
    <n4ds:S10_G00_01_007>GB</n4ds:S10_G00_01_007>
    <n4ds:S10_G00_01_009>Complement Localisation</n4ds:S10_G00_01_009>
    <n4ds:S10_G00_01_010>Service Distribution</n4ds:S10_G00_01_010>
    </n4ds:S10_G00_01>
    <n4ds:S10_G00_02>
    <n4ds:S10_G00_02_002>Test DSN</n4ds:S10_G00_02_002>
    <n4ds:S10_G00_02_004>retour_QappliDSN@gip-mds.fr</n4ds:S10_G00_02_004>
    <n4ds:S10_G00_02_005>0123456789</n4ds:S10_G00_02_005>
    </n4ds:S10_G00_02>
    <n4ds:S10_G00_95>
    <n4ds:S10_G00_95_008>20160310111134</n4ds:S10_G00_95_008>
    <n4ds:S10_G00_95_900>F1PFhmAQlUvwY5Rgq52rWK3</n4ds:S10_G00_95_900>
    </n4ds:S10_G00_95>
    <n4ds:S20_G00_05 xsi:type="n4ds:DSN_mensuelle_84_bloc3_vers_DGfip">
    <n4ds:S20_G00_05_001>01</n4ds:S20_G00_05_001>
    <n4ds:S20_G00_05_002>01</n4ds:S20_G00_05_002>
    <n4ds:S20_G00_05_003>11</n4ds:S20_G00_05_003>
    <n4ds:S20_G00_05_004>4</n4ds:S20_G00_05_004>
    <n4ds:S20_G00_05_005 originalValue="01102015">2015-10-01</n4ds:S20_G00_05_005>
    <n4ds:S20_G00_05_008>01</n4ds:S20_G00_05_008>
    <n4ds:S20_G00_05_010>01</n4ds:S20_G00_05_010>
    <n4ds:S20_G00_96>
    <n4ds:S20_G00_96_902>1</n4ds:S20_G00_96_902>
    </n4ds:S20_G00_96>
    <n4ds:S21_G00_06>
    <n4ds:S21_G00_06_001>319889432</n4ds:S21_G00_06_001>
    <n4ds:S21_G00_06_002>00088</n4ds:S21_G00_06_002>
    <n4ds:S21_G00_06_003>8623Z</n4ds:S21_G00_06_003>
    <n4ds:S21_G00_06_004>14 rue ferrus</n4ds:S21_G00_06_004>
    <n4ds:S21_G00_06_006>paris</n4ds:S21_G00_06_006>
    <n4ds:S21_G00_06_007>Batiment A</n4ds:S21_G00_06_007>
    <n4ds:S21_G00_06_008>Service Distrib</n4ds:S21_G00_06_008>
    <n4ds:S21_G00_06_010>GB</n4ds:S21_G00_06_010>
    <n4ds:S21_G00_06_012>01</n4ds:S21_G00_06_012>
    <n4ds:S21_G00_06_013 originalValue="01102015">2015-10-01</n4ds:S21_G00_06_013>
    <n4ds:S21_G00_06_014 originalValue="31102015">2015-10-31</n4ds:S21_G00_06_014>
    <n4ds:S21_G00_06_903>CASSIS ROGER</n4ds:S21_G00_06_903>
    <n4ds:S21_G00_11>
    <n4ds:S21_G00_11_001>00088</n4ds:S21_G00_11_001>
    <n4ds:S21_G00_11_002>8623Z</n4ds:S21_G00_11_002>
    <n4ds:S21_G00_11_003>14 rue Ferrus</n4ds:S21_G00_11_003>
    <n4ds:S21_G00_11_005>paris</n4ds:S21_G00_11_005>
    <n4ds:S21_G00_11_006>Complement Localisation</n4ds:S21_G00_11_006>
    <n4ds:S21_G00_11_007>Service Distribution</n4ds:S21_G00_11_007>
    <n4ds:S21_G00_11_008>15</n4ds:S21_G00_11_008>
    <n4ds:S21_G00_11_015>GB</n4ds:S21_G00_11_015>
    <n4ds:S21_G00_11_016>7501</n4ds:S21_G00_11_016>
    <n4ds:S21_G00_11_018 originalValue="31122015">2015-12-31</n4ds:S21_G00_11_018>
    <n4ds:S21_G00_11_904>CASSIS ROGER</n4ds:S21_G00_11_904>
    <n4ds:S21_G00_42>
    <n4ds:S21_G00_42_001>00023</n4ds:S21_G00_42_001>
    <n4ds:S21_G00_42_003>30</n4ds:S21_G00_42_003>
    <n4ds:S21_G00_42_004>74109</n4ds:S21_G00_42_004>
    <n4ds:S21_G00_42_005>01</n4ds:S21_G00_42_005>
    <n4ds:S21_G00_42_006>2015</n4ds:S21_G00_42_006>
    </n4ds:S21_G00_42>
    <n4ds:S21_G00_44>
    <n4ds:S21_G00_44_001>011</n4ds:S21_G00_44_001>
    <n4ds:S21_G00_44_002>2500.00</n4ds:S21_G00_44_002>
    </n4ds:S21_G00_44>

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    le contenu XML n'est pas valide, il manque les balises fermantes de "S20_G00_05", "S10_G00_00", "S10_G00_00" et même ma balise racine "DSN"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Ceci est qu'un extrait du fichier car tres volumineux

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    J'ai fait un test avec le contenu XML suivant :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <n4ds:DSN xmlns:n4ds="http://www.cnav.fr/n4ds" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <n4ds:S10_G00_01>
            <n4ds:S10_G00_01_001>319814711</n4ds:S10_G00_01_001>
            <n4ds:S10_G00_01_002>00010</n4ds:S10_G00_01_002>
            <n4ds:S10_G00_01_003>POEROKJD THIERRY</n4ds:S10_G00_01_003>
            <n4ds:S10_G00_01_004>14 rue tzetet</n4ds:S10_G00_01_004>
            <n4ds:S10_G00_01_006>paris</n4ds:S10_G00_01_006>
            <n4ds:S10_G00_01_007>GB</n4ds:S10_G00_01_007>
            <n4ds:S10_G00_01_009>Complement Localisation</n4ds:S10_G00_01_009>
            <n4ds:S10_G00_01_010>Service Distribution</n4ds:S10_G00_01_010>
        </n4ds:S10_G00_01>
        <n4ds:S10_G00_02>
            <n4ds:S10_G00_02_002>Test DSN</n4ds:S10_G00_02_002>
            <n4ds:S10_G00_02_004>retour_QappliDSN@gip-mds.ety455.ey</n4ds:S10_G00_02_004>
            <n4ds:S10_G00_02_005>0123456789</n4ds:S10_G00_02_005>
        </n4ds:S10_G00_02>
    </n4ds:DSN>
    vous pouvez ensuite parcourir par exemple les éléments de "S10_G00_01" comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($tab_fic->root->children[0]->children as $key => $value ) {
        echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value->name . '"<br />'; 
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup, grâce a toi j'ai réussi à mieux comprendre

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/05/2014, 10h48
  2. Récupérer données XML vers un affichage dojox DataGrid
    Par kcin dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 15/11/2012, 13h40
  3. XML::DOM Comment récupérer une donnée ?
    Par Sethenssen dans le forum Modules
    Réponses: 1
    Dernier message: 22/09/2011, 10h25
  4. VBA - Lire & Récupérer données XML > Excel
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/12/2007, 11h37

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