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 08/07/2006, 00h28   #1
Invité régulier
 
Inscription : juin 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 46
Points : 5
Points : 5
Par défaut [DOM] changer le nom d'un noeud

bonjour

je voudrais changer le nom d'un noeud dans un fichier xml avec le dom php
ex :
Code XML :
1
2
3
4
5
<xml>
  <balise1>
      <balise2>texte</balise2>
  </balise1>
</xml>

en

Code XML :
1
2
3
4
5
<xml>
  <nouvellebalise>
      <balise2>texte</balise2>
  </nouvellebalise>
</xml>

je sais qu'il existe la fonction set_name dans le dom mais je ne sais pas si elle fait bien ceci et je ne sais pas non plus comment l'utiliser , il n'y a pas d'exemple dans la doc php, j'ai essayer mais marche po...
merci d'avance de votre aide

++
iznogoud36 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2006, 01h22   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Voyons...

Si tu cherches à manipuler le nom d'un noeud pour l'exécution en cours du script, je ne vois pas vraiment l'intérêt de l'opération. Tu connais le nom, pourquoi le changer ?

Si tu cherches à le modifier de manière permanente, il te suffit d'ouvrir le document XML en tant que fichier (cf. la FAQ PHP à ce sujet), d'utiliser la fonction str_replace() à deux reprises (ou une regex, au choix) et de tour écrire dans le fichier en écrasant l'ancienne version. Le DOM n'intervient pas ici.

++
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2006, 10h38   #3
Invité régulier
 
Inscription : juin 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 46
Points : 5
Points : 5
salut,

en fait je veux changer le nom car c'est un morceau d'xml que j'aurais récuperer d'un autre fichier xml avec le dom et qu'il me faudra renommer avant d'integrer dans le nouveau pour qu'il puisse correspondre à mes besoins.
j'ai pensé a un autre moyen mais la aussi je bloque, c'est de creer un noeud vide

<nouvellebalise></nouvellebalise>

prendre le contenu du noeud a integrer (ici balise1), le mettre dans le nouveau noeud <nouvellebalise> et coller dans mon fichier à l'endroit voulu

mais je bloque sur prendre le contenu d'un noeud (et ses sous noeuds) et le coller dans un nouveau noeud parent.

si qq un a une methode miracle merci
iznogoud36 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2006, 10h43   #4
Invité régulier
 
Inscription : juin 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 46
Points : 5
Points : 5
...en réponse à yogui, je veux changer de nom sinon j'aurais des doublons que je ne souhaite pas

merci
iznogoud36 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2006, 10h57   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
En quoi str_replace() ne convient-il pas ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2006, 12h45   #6
Membre régulier
 
Inscription : mars 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 201
Points : 72
Points : 72
Salut,

J'ai trouvé une solution qui peut grandement être améliorée et optimisée. Elle ne prend pas en compte les retours à la ligne, ce qui ne devrait pas poser problème pour le parsing du flux, mais bon ça peut-être corrigé facilement. J'ai consideré que les balises d'ouverture et de fermeture <xml> et </xml> étaient les mêmes dans les deux fichiers, ce qui est apparemment le cas.

Fichier 1:
Code XML :
1
2
3
4
5
<xml>
  <nouvellebalise>
      <balise2>texte</balise2>
  </nouvellebalise>
</xml>

Fichier 2:
Code XML :
1
2
3
4
5
<xml>
  <balise1>
      <balise2>texte 2</balise2>
  </balise1>
</xml>

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
 
<?
 
$xml1 = file_get_contents("test.xml");
 
$xml2 = file_get_contents("test2.xml");
 
// On supprime les balises de fermeture du premier flux
$xml1 = preg_replace('#<\/nouvellebalise>(.*?)<\/xml>#si', '', $xml1);
 
$patterns[] = '(<xml>)'; // On supprime la balise d'ouverture du second flux
$patterns[] = '(<balise1>)'; // On supprime la première balise, on en a pas besoin vu que le premier flux l'ouvre
$patterns[] = '(<\/balise1>)'; // On remplace la balise de fermeture par la nouvelle balise pour que ça colle
 
$replacements[] = '';
$replacements[] = '';
$replacements[] = '</nouvellebalise>';
 
// On remplace les balises dans le second flux pour que les deux correspondent
$xml2 = preg_replace($patterns, $replacements, $xml2);
 
// Et on les lie
$out = $xml1.$xml2;
 
echo $out;
 
?>
Le résultat retourne:
Code XML :
1
2
3
4
5
6
7
8
<xml>
  <nouvellebalise>
      <balise2>texte</balise2>
 
 
      <balise2>texte 2</balise2>
  </nouvellebalise>
</xml>

On voit donc bien que les retours à la ligne ne sont pas pris en compte, à toi de modifier ça ;)
hush est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h24.


 
 
 
 
Partenaires

Hébergement Web