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] Modifier la valeur d'un noeud dans un fichier XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut [DOM] Modifier la valeur d'un noeud dans un fichier XML
    Bonsoir tout le monde,

    Je vous expose mon problème. Je cherche à remplacer tous les 60 ans qui se trouvent dans les balises <p> de mon fichier XML en 150 ans. J'arrive à trouver les valeurs qui se trouvent dans la balise <p> et maintenant je voudrais les remplacer. Pour l'instant j'en suis là au bout de plusieurs essais d'abord avec SimpleXml et maintenant avec DOM qui me parait plus pratique :

    1) Charger un fichier XML (OK)
    2) Rechercher toutes les balises <p> (OK)
    3) Modifier certaines de ces balises (NOK)
    4) Réécrire le fichier XML comme il était au début en tenant compte des balises <p> modifiées. (NOK)

    Voici mon fichier XML simplifié :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <c id="tt1-7" level="series">
     
            <did>
              <unittitle type="titre">niveau de titre 1</unittitle>
            </did>
     
            <c id="tt2-5" level="subseries">
     
              <did>
                <unittitle type="titre">Niveau de titre 2</unittitle>
              </did>
     
     
              <c id="de-40" level="file">
                <did>
                  <unitid>40</unitid>
     
                  <unittitle>Intitulé</unittitle>
     
                  <unitdate normal="1940/1946">1940-1946</unitdate>
                </did>
              </c>
     
     
     
                <c id="de-13" level="file">
                  <did>
                    <unitid>13</unitid>
     
                    <unittitle>Intitulé</unittitle>
     
                    <unitdate normal="1955/1956">1955-1956</unitdate>
     
                  </did>
     
                  <accessrestrict>
                    <accessrestrict type="delai">
                      <head>Délai</head>
     
                      <p>150 ans</p>
                    </accessrestrict>
     
                    <accessrestrict type="com">
                      <head>communication</head>
     
                      <p>2107</p>
                    </accessrestrict>
                  </accessrestrict>
                </c>
    	</c>
    </c>
     
     
     
     
     <c id="tt1-7" level="series">
     
            <did>
              <unittitle type="titre">niveau de titre 1</unittitle>
            </did>
     
            <c id="tt2-5" level="subseries">
     
              <did>
                <unittitle type="titre">Niveau de titre 2</unittitle>
              </did>
     
     
            	<c id="tt2-5" level="subseries">
     
            	  <did>
            	    <unittitle type="titre">Niveau de titre 3</unittitle>
            	  </did>
     
     
                <c id="de-14" level="file">
                  <did>
                    <unitid>14</unitid>
     
                    <unittitle>Intitulé</unittitle>
     
                    <unitdate normal="1955/1956">1955-1956</unitdate>
     
                  </did>
     
                  <accessrestrict>
                    <accessrestrict type="delai">
                      <head>Délai</head>
     
                      <p>150 ans</p>
                    </accessrestrict>
     
                    <accessrestrict type="com">
                   <head>communication</head>
     
                      <p>2107</p>
                    </accessrestrict>
                  </accessrestrict>
                </c>
     
                </c>
     
    	</c>
    </c>
    Et voici le code que j'ai pour l'instant :
    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
    <?php
      $dom = new DomDocument;
      $dom->load("test.xml");
      $listeP = $dom->getElementsByTagName('p');
      foreach($listeP as $p)
        echo $p->firstChild->nodeValue . "<br />";
     
      echo "---<br />";
     
     
     //$chaine_XML =??? ;
     
     
     //Enregistrement dans le fichier
      $id_fichier = fopen('nouveauFichier.xml', "w");
      rewind($id_fichier);
      fwrite($id_fichier, $chaine_XML);
      fclose($id_fichier);
     
      ?>
    J'ai pensé à utiliser set_content mais sans succès. Est-ce quelqu'un aurait une idée de la façon de procéder svp ?

    Merci beaucoup pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    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
    <?php
      $dom = new DomDocument;
      $dom->load("test.xml");
      $listeP = $dom->getElementsByTagName('p');
     
    	foreach($listeP as $p) {
            if($p->firstChild->nodeValue=="60 ans")
    		{
                $p->firstChild->nodeValue="75 ans";
    			$x=25;
    			$changement="oui";
            }
     
    		if($p->firstChild->nodeValue=="150 ans")
            {
    			$p->firstChild->nodeValue="147 ans";
    			$x=10;
    			$changement="oui";
            }
    		$rest = substr($p->firstChild->nodeValue, -3);
    		if ($rest!="ans" && strlen($p->firstChild->nodeValue)==4)
    		{
    			if($changement=="oui")
    			{
    			$p->firstChild->nodeValue=($p->firstChild->nodeValue)-$x;
    			$changement="non";
     
    			}
    		}
    		$dom->save("nouveauFichier.xml");
    	}
      ?>

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

Discussions similaires

  1. Modifier la valeur d'un noeud d'un arbre XML
    Par Rony Rauzduel dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 01/03/2012, 15h30
  2. [XML] [DOM XML] editer un noeud dans un fichier XML
    Par nina.b dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/09/2009, 13h22
  3. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 13h11
  4. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 18h38
  5. Réponses: 9
    Dernier message: 04/05/2006, 18h33

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