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] Remplacement du premier noeud mais suppression du deuxième ?!


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut [DOM] Remplacement du premier noeud mais suppression du deuxième ?!
    Bonjour,

    Je bute sur la bizarrerie suivante :

    Je veux remplacer le premier noeud, qui est un noeud texte, par un noeud paragraphe (le contenu ci-dessous est extrait d'une definition data dd qui permet de faire suivre un noeud texte par des noeuds balisés) :
    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
    <dd>Les protocoles suivants peuvent être installés sur demande :
          <ul>
            <li>Profibus DPV1</li>
            <li>deviceNet</li>
            <li>CANopen</li>
            <li>Ethernet – modbus</li>
            <li>Ethernet / IP</li>
            <li>Ethernet / IP 2 port</li>
            <li>Profinet IO</li>
            <li>Profinet IO 2 port</li>
            <li>Ethercat</li>
          </ul>
          <p class="Important"><strong>Important :</strong> Ces options doivent
          impérativement être demandées à la commande car elles nécessitent un
          boîtier spécifique.</p>
        </dd>
    Pour ce faire, j'ai écrit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $p = $module_content_xhtml -> createElement('p');
    $newnode = $module_content_xhtml -> importNode($body -> firstChild, true);
    $p -> appendChild($newnode);
    $body -> firstChild -> parentNode -> replaceChild($p, $body -> firstChild);
    ($module_content_xhtml est le DOMDocument de travail, $body est le noeud <body> contenant le code xhtml devant être traité, hors balise dd.)

    Le remplacement du noeud texte par un noeud paragraphe se fait bien, mais je perds le noeud ul qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ><p>Les protocoles suivants peuvent être installés sur demande :
          </p><p class="Important"><strong>Important :</strong> Ces options doivent impérativement être demandées à la commande car elles nécessitent un boîtier spécifique.</p>
    Pouvez-vous s'il vous plaît m'expliquer la raison de ce comportement et m'indiquer comment obtenir le code xhtml complet ?

    Un grand merci d'avance

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Après quelques tests, mon hypothèse que si on utilise importNode avec la même instance de DOMDocument en source et en destination, ça "coupe" le node au lieu de le copier. Du coup, après l'importNode, le premier enfant de $body, c'est la liste <ul> et c'est donc la liste <ul> que tu remplaces avec ton remplaceChild.
    Essaye d'utiliser cloneNode à la place d'importNode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $p = $module_content_xhtml -> createElement('p');
    $newnode = $body -> firstChild -> cloneNode(true);
    $p -> appendChild($newnode);
    $body -> firstChild -> parentNode -> replaceChild($p, $body -> firstChild);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Merci Celira pour tes tests, ton explication et ta suggestion !

    Effectivement, c'est tout à fait cela et j'obtiens bien le noeud texte enveloppé dans un noeud paragraphe avec le reste conservé.


    Merci, merci, merci et bravo pour la finesse de ton analyse

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

Discussions similaires

  1. DOM, suprimer noeud mais pas le contenu
    Par junix dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2009, 09h37
  2. [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, 10h17
  3. Réponses: 9
    Dernier message: 22/04/2006, 15h05
  4. [DOM XML] Supprimer un noeud
    Par Musashii dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/06/2005, 12h19
  5. [XPATH] ou [XSL] Arret au premier noeud
    Par laurenzo dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 25/04/2005, 17h42

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