Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2008, 18h08   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Par défaut [DOM] organiser les balises du fichier XML

Bonjour,
Voilà la structure de mon fichier XML:

Code XML :
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<SiteConfiguration>
    <Tab TabId="1" TabName="Accueil" >
         <Module ModuleId="71" ModuleTitle="Configurateur" />
    </Tab>
   <Tab ..................>
         <Module ...................../>
   </Tab>
   <ModuleDefinition FriendlyName="Trombinoscope" ModuleDefId="55" />
   <ModuleDefinition ....................... />
</SiteConfiguration>

dans mon fichier xml j'ajoute un nouveau nœud 'Tab' mais cette dernière s'ajoute à la fin,or moi je veux l'ajouter juste après le dernier nœud 'Tab'.
Comment puis-je faire ?
Merci de votre aide.
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 18h15   #2
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
1ere ment :
2e ment : code php ?
3e ment : api xml utilisée ? SimpleXML ?
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 10h49   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Bonjour,

voilà mon code php:

Code :
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
public function addtab()
	{
	    $identifianttab=array();
                 $identifianttab=$this->DernierElementTab();
	    $donnees=array();
                 //je récupère les données saisies par l'utilisateur	  
	    $donnees=$this->RecupValeur(); 
                 /* J'ouvre un nouveau document Dom */
	    $doc = new DOMDocument(); 		
                 $doc->load($this->path); //je charge mon fichier XML
	     /* creer une nouvelle entree dans le fichier xml */	
		$Newtab = $doc->createElement("Tab"); 
                          /* ajouter les proprietés au nouveau noeud 'Tab' */
		$Newtab->setAttribute("TabId",$identifianttab['TabId']+1);
		$Newtab->setAttribute("TabName",$donnees['nomtab']);  
		$Newtab->setAttribute("TabOrder",$donnees['taborder']); 
		/* recuperer les anciens noeud */
                         $SiteConfiguration = $doc->getElementsByTagName("SiteConfiguration")->item(0); 
                         /* ajouter le nouveau noeud 'Tab' a la liste des noeuds existant */ 		
                         $SiteConfiguration->appendChild($Newtab);   				
		$chaineXML = $doc->saveXML();
                          /* j'ouvre le fichier xml en ecriture */			
		$handel=fopen($this->path,'w');   
                         /* ecriture des donnees dans le fichier */ 		
                         fwrite($handel,$chaineXML);  
                          /* fermeture du fichier */
	  	fclose($handel);   	
 
	}
Ce code me permet d'ajouter à mon fichier xml un nouveau nœud 'Tab', quand j'exécute ce code voilà où s'ajoute le nœud 'Tab':

Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<SiteConfiguration>
    <Tab TabId="1" TabName="Accueil" >
         <Module ModuleId="71" ModuleTitle="Configurateur" />
    </Tab>
   <Tab ..................>
         <Module ...................../>
   </Tab>
   <ModuleDefinition FriendlyName="Trombinoscope" ModuleDefId="55" />
   <ModuleDefinition ....................... />
   //nouveau noeud 'Tab' ajouter
    <Tab ................../>
 
</SiteConfiguration>

Or moi je veux qu'elle s'ajoute comme ça:
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<SiteConfiguration>
    <Tab TabId="1" TabName="Accueil" >
         <Module ModuleId="71" ModuleTitle="Configurateur" />
    </Tab>
   <Tab ..................>
         <Module ...................../>
   </Tab>
 //nouveau noeud 'Tab' ajouter
    <Tab ................../>
 
   <ModuleDefinition FriendlyName="Trombinoscope" ModuleDefId="55" />
   <ModuleDefinition ....................... />
 
</SiteConfiguration>

c'est ça mon objectif.
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h32   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est ce que vous faites pourtant : appendChild ajoute l'enfant comme son dernier fils.

Code :
1
2
3
4
5
6
7
8
9
10
                         $SiteConfiguration = $doc->getElementsByTagName("SiteConfiguration")->item(0); 
                         /* ajouter le nouveau noeud 'Tab' a la liste des noeuds existant */ 		
                         $SiteConfiguration->appendChild($Newtab);   				
		$chaineXML = $doc->saveXML();
                          /* j'ouvre le fichier xml en ecriture */			
		$handel=fopen($this->path,'w');   
                         /* ecriture des donnees dans le fichier */ 		
                         fwrite($handel,$chaineXML);  
                          /* fermeture du fichier */
	  	fclose($handel);
A remplacer par quelque chose comme :
Code :
1
2
3
4
5
6
7
$modules = $doc->getElementsByTagName('ModuleDefinition');
if ($modules && $modules->length > 0) {
    $modules->item(0)->parentNode->insertBefore($Newtab, $modules->item(0));
} else {
    $doc->documentElement->appendChild($Newtab);
}
$doc->save($this->path);
(non testé)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 12h53   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Merci julp, après modification de mon code comme vous m'avais montré est le suivant:

Code :
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
public function addtab()
	{
	    $identifianttab=array();
                 $identifianttab=$this->DernierElementTab();
	    $donnees=array();
                 //je récupère les données saisies par l'utilisateur	  
	    $donnees=$this->RecupValeur(); 
                 /* J'ouvre un nouveau document Dom */
	    $doc = new DOMDocument(); 		
                 $doc->load($this->path); //je charge mon fichier XML
	     /* creer une nouvelle entree dans le fichier xml */	
		$Newtab = $doc->createElement("Tab"); 
                          /* ajouter les proprietés au nouveau noeud 'Tab' */
		$Newtab->setAttribute("TabId",$identifianttab['TabId']+1);
		$Newtab->setAttribute("TabName",$donnees['nomtab']);  
		$Newtab->setAttribute("TabOrder",$donnees['taborder']); 
		/* recuperer les anciens noeud */
                         $SiteConfiguration = $doc->getElementsByTagName("SiteConfiguration")->item(0); 
                         /* ajouter le nouveau noeud 'Tab' a la liste des noeuds existant */ 		
                         $Tab = $doc->getElementsByTagName("Tab");
		if ($Tab && $Tab->length > 0) 
		   {
                                $Tab->item(0)->parentNode->insertBefore($Newtab, $Tab->item(0));
                             } 
                          else
		  {
                               $SiteConfiguration->appendChild($Newtab);
                            }	
			
		$chaineXML = $doc->saveXML();
                          /* j'ouvre le fichier xml en ecriture */			
		$handel=fopen($this->path,'w');   
                         /* ecriture des donnees dans le fichier */ 		
                         fwrite($handel,$chaineXML);  
                          /* fermeture du fichier */
	  	fclose($handel);   	
				
	}
le code est bon mais je veux que mon nouveau nœud 'Tab' soit rajouter à la fin de tout les nœud 'Tab' pas au dédut, par exemple:

Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<SiteConfiguration>
    <Tab TabId="1" TabName="Accueil" >
         <Module ModuleId="71" ModuleTitle="Configurateur" />
    </Tab>
   <Tab ..................>
         <Module ...................../>
   </Tab>
 //nouveau noeud 'Tab' ajouter
    <Tab ................../> 

   <ModuleDefinition FriendlyName="Trombinoscope" ModuleDefId="55" />
   <ModuleDefinition ....................... />
  
</SiteConfiguration>
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h13   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Evidemment puisque vous avez changé le nœud de référence : j'avais volontairement pris le premier élément ModuleDefinition alors que vous prenez ici le premier Tag
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h14   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Pardon, c est bon il suffit que j'integre ton code, merci encore julp
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h19   #8
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Svp,aprés que j'ajoute le nouveau noeud 'Tab' comment je peux faire un saut de ligne?
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h21   #9
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Le Xml est un langage de structuration de données pas de rendu HTML, donc pas de saut de ligne entre deux noeuds.
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h23   #10
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous pouvez utiliser les options de formatage de l'extension DOM (en fait c'est la librairie sous-jacente libxml2 qui l'implante) comme expliqué dans la FAQ sinon il vous suffit de créer puis ajouter un nœud de type text.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 14h59   #11
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 97
Points : 15
Points : 15
Merci julp de votre aide, j'ai opté pour la première proposition, bravo pour toi.
nadiaflamingenierie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h12.


 
 
 
 
Partenaires

Hébergement Web