Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2008
    Messages : 149
    Points : 24
    Points
    24

    Par défaut [PHP] Noeud root et noeud parent

    Bonjour à tous !

    Je travaille actuellement sur la construction d'un fichier XML via DOM XML. Chaque fichier contient des informations concernant des communes. J'ai donc plusieurs fichiers XML car j'ai plus de 40 communes à gérer.

    Voici la structure que j'aimerais pour mon fichier :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <data>
       <commune>
          <Identite>
             <Nb_Habitant>...</Nb_Habitant>
             <Maire>...</Maire>
          </Identite>
          <Realisation>
              <Instal_Photo>
                 <Lieu>...</Lieu>
                 <Lieu>...</Lieu>
              </Instal_Photo>
              <Instal_Reseau>
                 <Lieu>...</Lieu>
                 <Lieu>...</Lieu>
              </Instal_Reseau>
          </Realisation>
          <Patrimoine>
               <Nb_Instal_Photo>...</Nb_Instal_Photo>
               <Nb_Instal_Reseau>...</Nb_Instal_Reseau>
          </Patrimoine>
       </commune>
    </data>
    J'aimerais savoir quelle est l'instruction qui va me permettre d'ajouter les noeud Identite, Patrimoine et Realisation à l'intérieur du nœud Commune.

    Pour le moment j'arrive à ajouter les nœuds mais seulement dans le nœud root : data !

    Merci de votre aide !

    Ah oui je voulais préciser que je construisais mon fichier via différents fichiers php...

  2. #2
    Membre Expert
    Inscrit en
    septembre 2006
    Messages
    1 466
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 1 466
    Points : 1 598
    Points
    1 598

    Par défaut

    Hello,
    D'après la Doc (cf http://www.php.net/manual/fr/functio...pend-child.php ), la méthode append_child() ajoute un n nouveau fils à la fin des enfants de l'élément courant.
    Donc d'abord tu récupères l'élément qui sera le futur parent, puis tu utilise cette méthode append_child() dessus.

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2008
    Messages : 149
    Points : 24
    Points
    24

    Par défaut

    Salut à toi et merci pour ta réponse rapide !

    J'ai réussi à gérer l'ajout du nœud "commune" lorsque mon fichier XML est vide mais je gère aussi le fait que si le fichier et le nœud existe, on supprime le nœud et on le rajoute...

    Ici par contre je n'arrive rien à faire... Comment puis-je faire pour récupérer le noeud commune ?

    Pour récupérer le noeud racine il suffit de faire :
    Code :
    $root = $file->documentElement;
    Mais pour le nœud "commune" rien ne fonctionne... J'ai essayé cela :
    Code :
    1
    2
    $noeud_commune = $file->getElementsByTagName("commune");
    $element_commune=$noeud_commune->item(0)->nodeName;
    Qui me récupère bien "commune" mais lorsque j'envoie ma fonction pour remplir mon fichier j'ai une erreur :

    Code :
    Fatal error: Call to a member function appendChild() on a non-object in c:\program files\apache group\Apache\www-internet\page\syndicat\territoire\admin\entree_donnee_realisation.php on line 531
    Un bout de mon code pour comprendre en pièces jointes :
    1er pièce jointe : DOMXML avec php
    2ème pièce jointe : Fonction Chargement_Realisation_XML
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Inscrit en
    septembre 2006
    Messages
    1 466
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 1 466
    Points : 1 598
    Points
    1 598

    Par défaut

    Hello,
    Tu devrais plutôt faire qqchose comme ça :
    Code :
    1
    2
    3
    $noeud_commune = $file->getElementsByTagName("commune");
    $element_commune=$noeud_commune->item(0);
    $element_commune->appendChild(.........);
    Avant tu n'avais pas l'élément lui même, mais son nom.

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2008
    Messages : 149
    Points : 24
    Points
    24

    Par défaut

    Ça ne marche toujours pas J'ai beau lire et relire je ne trouve pas d'où l'erreur pourrait venir...

    L'appendChild je le fait dans ma fonction Chargement_Realisation_XML en récupérant le noeud commune dans ma fonction ...

    Code :
    Chargement_Realisation_XML($VG, $file, $element_commune, $vs_Realisation_Commune);
    Je suis sure que c'est une erreur grosse comme le monde mais je vois vraiment pas...

  6. #6
    Membre Expert
    Inscrit en
    septembre 2006
    Messages
    1 466
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 1 466
    Points : 1 598
    Points
    1 598

    Par défaut

    Je suis pas rentré dans le détail de ton code, mais pour moi le truc louche, c'est :
    Code :
    $element_commune=$noeud_commune->item(0)->nodeName;
    Car $element_commune n'est alors pas un noeud xml mais une chaine de caractères.

  7. #7
    Membre à l'essai
    Étudiant
    Inscrit en
    mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2008
    Messages : 149
    Points : 24
    Points
    24

    Par défaut

    Avec ou sans ça ne fonctionne pas.

    Pour faire simple je veux rechercher le noeud "commune", le garder en mémoire et l'envoyer via une fonction. Cette fonction me permet d'ajouter les nœuds.

    Code :
    1
    2
    $noeud_commune = $file->getElementsByTagName("commune");
    $element_commune=$noeud_commune->item(0);
    $element_commune sera utilisé dans la fonction
    Code :
    Chargement_Realisation_XML($VG, $file, $element_commune, $vs_Realisation_Commune);
    et cette fonction permet d'ajouter les noeuds
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function Chargement_Realisation_XML($VG, $file, $element_commune, $vs_Realisation_Commune)
    {			
    	// Création du noeud Realisation
    	$element_realisation = $file->createElement("Realisation");
    	$element_realisation->setAttribute("name", $vs_Realisation_Commune['ID_Annee']); //On lui ajoute l attribut
    	$element_realisation = $element_commune->appendChild($element_realisation);
    					
    	// Création du noeud MetreTranchees 
    	$element_metre_tranchees = $file->createElement("MetreTranchees");
            //On crée un élément MetreTranchees
    	$element_metre_tranchees = $element_realisation->appendChild($element_metre_tranchees);	
            //On ajoute cet élément à la racine
    	$texte_metre_tranchees = $file->createTextNode ($vs_Realisation_Commune["Metre_Tranchee"]); //On crée un texte
    	$texte_metre_tranchees = $element_metre_tranchees->appendChild($texte_metre_tranchees);
    }
    Erreur sur la ligne en gras !

  8. #8
    Membre à l'essai
    Étudiant
    Inscrit en
    mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2008
    Messages : 149
    Points : 24
    Points
    24

    Par défaut

    Ça y est ça fonctionne ! Il m'a suffit de faire cela :

    Code :
    $element_commune = $file->getElementsByTagName("commune")->item(0);
    au lieu de cela :

    Code :
    1
    2
    $noeud_commune = $file->getElementsByTagName("commune");
    $element_commune=$noeud_commune->item(0);
    Merci à vous de vous êtes intéressé à mon problème ! Je vous souhaite une bonne journée et encore merci !!

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

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
  •