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] changer le nom d'un noeud


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 25
    Points
    25
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xml>
      <balise1>
          <balise2>texte</balise2>
      </balise1>
    </xml>

    en

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

    ++

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    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.

    ++

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    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

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    ...en réponse à yogui, je veux changer de nom sinon j'aurais des doublons que je ne souhaite pas

    merci

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    En quoi str_replace() ne convient-il pas ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Points : 108
    Points
    108
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xml>
      <nouvellebalise>
          <balise2>texte</balise2>
      </nouvellebalise>
    </xml>

    Fichier 2:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xml>
      <balise1>
          <balise2>texte 2</balise2>
      </balise1>
    </xml>

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2011, 10h07
  2. [DOM] changer le contenu d'un noeud
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/08/2009, 13h47
  3. [DOM]Changer les noms des fils d'un noeuds après un clonenode
    Par Daï2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/01/2009, 17h27
  4. [DOM] Récupérer le nom du premier noeud d'un fichier XML en PHP
    Par ePsymon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/02/2008, 09h17
  5. TREEVIEW : Editer (changer le nom) d'un Noeud
    Par cyberlewis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/07/2004, 15h00

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