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] organiser les balises du fichier XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut [DOM] organiser les balises du fichier XML
    Bonjour,
    Voilà la structure de mon fichier XML:

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

  2. #2
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    1ere ment :
    2e ment : code php ?
    3e ment : api xml utilisée ? SimpleXML ?

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    voilà mon code php:

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

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est ce que vous faites pourtant : appendChild ajoute l'enfant comme son dernier fils.

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

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut
    Merci julp, après modification de mon code comme vous m'avais montré est le 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut
    Pardon, c est bon il suffit que j'integre ton code, merci encore julp

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut
    Svp,aprés que j'ajoute le nouveau noeud 'Tab' comment je peux faire un saut de ligne?

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Le Xml est un langage de structuration de données pas de rendu HTML, donc pas de saut de ligne entre deux noeuds.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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.

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 42
    Points
    42
    Par défaut
    Merci julp de votre aide, j'ai opté pour la première proposition, bravo pour toi.

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

Discussions similaires

  1. manipuler les balises dans fichier xml
    Par farid0031 dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/12/2011, 14h25
  2. Réponses: 3
    Dernier message: 20/05/2006, 20h42
  3. [ASP][DOM] Récupérer les éléments d'un XML
    Par Tikate dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/05/2006, 11h51
  4. [logging] Modifier les balises de sortie XML de Java ?
    Par MiJack dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/12/2005, 13h20
  5. Pb de balises dans fichier XML
    Par allstar dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h59

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