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 13/10/2011, 14h22   #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 Comment supprimer une balise <div> en conservant le contenu ?

Citation:
Envoyé par Doc_xhtml Voir le message
Ce dont j'ai besoin, c'est de supprimer la balise <body> à l'intérieur du noeud, en conservant la structure DOM du noeud, de façon à pouvoir utiliser la fonction replaceNode, dont les deux arguments oldnode et newnode doivent être des noeuds.
En effet, si j'ai bien compris, on ne peut pas remplacer un noeud par une chaîne html.
Dans le même ordre d'idée, comment faire pour supprimer une balise <div> et donc remonter son contenu d'un cran ?

Ceci est par exemple réalisé par des éditeurs html — pour ma part j'utilise Amaya — qui permettent de retirer la division sélectionnée.
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 16h56   #2
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
Voici la réponse à ma question

Ci-dessous une fonction qui convertit les enfants d'un noeud en noeud (et non en chaîne html).

Cette fonction peut être utilisée pour retirer une division (suppression des balises <div> </div> enveloppant une structure html)

Elle peut aussi être utilisée pour remplacer un noeud simple (par exemple un paragraphe) par une structure plus complexe.

Code :
1
2
3
4
5
6
7
8
9
10
11
function innerHtmlAsNode($wrapping_node)
{
$childs_as_node = new DOMDocument;
 
foreach($wrapping_node -> childNodes as $node)
{
$childs_as_node -> appendChild($childs_as_node -> importNode($node, true));
}
 
return $childs_as_node -> documentElement;
}

Si le noeud $current_node pointe sur une div, la suppression de la div pourrait se faire ainsi :

Code :
1
2
3
4
5
$content_of_div = innerHtmlAsNode($current_node);
 
$newnode = $doc_xhtml -> importNode($content_of_div, true);
 
$current_node -> parentNode -> replaceChild($newnode, $current_node);
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 10h04   #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
Bonjour,

Je me suis enthousiasmé trop rapidement.

J'ai en effet essayé avec un seul noeud contenu dans la balise enveloppe (par exemple <body><img /></body> ou <body><div></body>) et en ai conclu que la fonction marche pour un nombre indéterminé de balises contenues dans la balise enveloppe.

En fait, dans le cas où un noeud contient plusieurs balises, importNode importe seulement la première balise.

Je dois donc m'y prendre autrement. (J'entrevois une solution. Je la communiquerai quand je pourrai me remettre à mon PC.)

A+
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 00h05   #4
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
Bonjour,

Ayant trouvé la solution à ma question « Remplacer le noeud courant par du code xhtml obtenu sous forme de chaîne », j'en déduis la réponse à la question de ce post. ($div représente le noeud div initial.)

Code :
1
2
3
4
5
6
7
8
9
$before_div = $div;
 
for($node = $div -> lastChild ; $node !== null ; $node = $node -> previousSibling)
{
 	$newnode = $document -> importNode($node, true); 
 	$before_div = $before_div -> parentNode -> insertBefore($newnode, $before_div); // (parentNode est nécessaire car son absence génère une erreur « Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' » )
}
 
$div -> parentNode -> removeChild($div);
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 05h03.


 
 
 
 
Partenaires

Hébergement Web