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

APIs XML Discussion :

[PHP] Noeud root et noeud parent


Sujet :

APIs XML

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    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 : 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
     
    <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 expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    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 du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $root = $file->documentElement;
    Mais pour le nœud "commune" rien ne fonctionne... J'ai essayé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Hello,
    Tu devrais plutôt faire qqchose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Je suis pas rentré dans le détail de ton code, mais pour moi le truc louche, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $noeud_commune = $file->getElementsByTagName("commune");
    $element_commune=$noeud_commune->item(0);
    $element_commune sera utilisé dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chargement_Realisation_XML($VG, $file, $element_commune, $vs_Realisation_Commune);
    et cette fonction permet d'ajouter les noeuds
    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
    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 du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    Par défaut
    Ça y est ça fonctionne ! Il m'a suffit de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $element_commune = $file->getElementsByTagName("commune")->item(0);
    au lieu de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Sélection du noeud root dans un arbre vide
    Par DaveShot dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 25/05/2010, 15h07
  2. Selectionner par defaut le noeud root d un JTree
    Par bebel7777 dans le forum Composants
    Réponses: 1
    Dernier message: 25/05/2010, 10h15
  3. [XML] nombre des sous noeuds d'un noeud parent
    Par med_alpa dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/10/2008, 02h39
  4. [2.0]Replacer le noeud Root d'un XML
    Par totoen dans le forum C#
    Réponses: 7
    Dernier message: 07/08/2008, 12h24
  5. [DOM] Modifier noeud root
    Par rainz dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 16/08/2005, 10h25

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