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 16/11/2011, 11h00   #1
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
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
Points : 59
Points : 59
Par défaut 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 :
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 :
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 :
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
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h17   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 663
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 663
Points : 5 388
Points : 5 388
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 :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h50   #3
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
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
Points : 59
Points : 59
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
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h38.


 
 
 
 
Partenaires

Hébergement Web