Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP > APIs
APIs DOM, SAX, JAXP,STAX... leur fonctionnement, leurs implémentations Avant de poster -> FAQ XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/10/2010, 10h05   #1
Skangell
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 149
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 149
Points : 26
Points : 26
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...
Skangell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 10h39   #2
Morbo
Membre Expert
 
Inscription : septembre 2006
Messages : 1 466
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 466
Points : 1 597
Points : 1 597
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.
Morbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 12h00   #3
Skangell
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 149
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 149
Points : 26
Points : 26
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
Type de fichier : txt exemple DOM.txt (2,1 Ko, 3 affichages)
Type de fichier : txt fonction.txt (946 octets, 1 affichages)
Skangell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 13h30   #4
Morbo
Membre Expert
 
Inscription : septembre 2006
Messages : 1 466
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 466
Points : 1 597
Points : 1 597
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.
Morbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 13h51   #5
Skangell
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 149
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 149
Points : 26
Points : 26
Ç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...
Skangell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 13h58   #6
Morbo
Membre Expert
 
Inscription : septembre 2006
Messages : 1 466
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 466
Points : 1 597
Points : 1 597
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.
Morbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 14h06   #7
Skangell
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 149
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 149
Points : 26
Points : 26
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 !
Skangell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 14h38   #8
Skangell
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 149
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 149
Points : 26
Points : 26
Ç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 !!
Skangell est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h28.


 
 
 
 
Partenaires

Hébergement Web