Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 06/02/2012, 13h09   #1
Invité de passage
 
Inscription : février 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 22
Points : 3
Points : 3
Par défaut remplacer des balises html d'une variable

Bonjour,

Au sein d'un traitement php je me retrouve avec une variable contenant une portion d'un document html.

L'objectif est de parvenir à remplacer et ou modifier certaines balises précises au sein de la chaine de caractère.

Les modifications désirées seraient les suivantes :
  • Ajouter la classe "entete" à tout les premiers <tr> d'un <table>, et la classe "derniereLigne" à tout les derniers <tr> d'un table.
  • remplacer les <li> par <div classe="premierNiveau"> mais par contre, s'il s'agit d'un <li> imbriqué (<ul><li><ul><li></li></ul></li><ul>), le remplacer par <div classe="secondNiveau">
  • supprimer les balises <ul> car elles ne seront plus utilisées

Après avoir regardé diverses liens du forum j'ai appris l’existence de loadHtml et Xpath.
La question que je me pose, n'ayant jamais utilisé ces notions, est la suivante: est-ce que ce que je cherche à faire est possible, où puis-je trouver des tutoriels sur ces notions, et pourriez-vous m'aider à définir les méthodes et syntaxe a utiliser pour parvenir au résultat attendu?

Merci d'avance de votre aide.
onlajoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 11h25   #2
Invité de passage
 
Inscription : février 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 22
Points : 3
Points : 3
Par défaut Expressions Xpath

Bonjour,

Suite à de plus amples recherche j'ai réussi a créer les requêtes Xpath qui isolent mes éléments.

Code :
1
2
3
$doc = new DOMDocument();
$doc->loadHTML($htmlString);
$xpath = new DOMXPath($doc);

J'obtiens donc maintenant la possibilité d'extraire le contenu concerné de ma chaine initiale, mais je ne sais pas comment faire pour remplacer les éléments isolés dans ma chaine de caractère initiale : ajouter une classe à un élément <tr>, remplacer les <li> par des <div>, et supprimer les <ul> ?

Pouvez vous m'aider sur ce point?
Merci d'avance!
onlajoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h18   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Citation:
Ajouter la classe "entete" à tout les premiers <tr> d'un <table>, et la classe "derniereLigne" à tout les derniers <tr> d'un table.
<thead> et <tfoot> c'est pas pour les chiens.

Citation:
remplacer les <li> par <div classe="premierNiveau"> mais par contre, s'il s'agit d'un <li> imbriqué (<ul><li><ul><li></li></ul></li><ul>), le remplacer par <div classe="secondNiveau">
C'est pas vraiment quelque chose à faire d'un point de vue sémantique.

Citation:
supprimer les balises <ul> car elles ne seront plus utilisées
Ah bon ?

J'ose espérer que tous ces changements ne visent pas à fabriquer de toute pièces une mise en page utilisant les tableaux... Quel est le but réel de la manœuvre ?

Citation:
J'obtiens donc maintenant la possibilité d'extraire le contenu concerné de ma chaine initiale, mais je ne sais pas comment faire pour remplacer les éléments isolés dans ma chaine de caractère initiale : ajouter une classe à un élément <tr>, remplacer les <li> par des <div>, et supprimer les <ul> ?
Regarde la doc: http://uk.php.net/manual/fr/domnode.replacechild.php
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h43   #4
Invité de passage
 
Inscription : février 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 22
Points : 3
Points : 3
Par défaut Précisions

Bonjour,

Tout d'abord merci de prendre le temps de répondre.
Ensuite voici une petite explication du traitement certes inattendu que je recherche :
je reçois une portion de chaine html, que je dois modifier pour lui faire respecter la syntaxe d'un document .mht (archive web unique, lisible par word par exemple, et très similaire à du html dans l'écriture.)

Citation:
<thead> et <tfoot> c'est pas pour les chiens.
Le code html que je reçois est généré par l'utilisateur via une interface web utilisant un éditeur riche. L'éditeur riche ne permet pas la gestion du pied de page, et la mise en forme css intégrée au .mht ne permet pas de différentier la première et la dernière ligne autrement que par une classe spécifique. Ce css m'est imposé.

Citation:
C'est pas vraiment quelque chose à faire d'un point de vue sémantique.
J'en conviens, mais au sein du .mht, les liste <ul><li/></ul> n'existent pas, il s'agit de <div> successifs auquels sont appliqués une mise en forme spécifique. D'où la réponse à la question suivante : pourquoi supprimer les <ul> : parce que si j'enlève les balises <li/> pour les transformer en <div>, autant enlever également les balise <ul/>

Citation:
fabriquer de toute pièces une mise en page utilisant les tableaux?
Non, heureusement, l'objectif est de parvenir à créer un document .mht qui respecterait la mise en forme demandée par l'utilisateur au sein de l'éditeur riche, mais retranscrite dans un .mht.

Citation:
Regarde la doc
Je suis dessus, mais on ne peut malheureusement pas dire qu'elle regorge d'exemple
onlajoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 14h46   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Ok, tu aurais dû préciser le contexte de ton projet parce que je me suis imaginé un concept bien crade à première vue

Citation:
Je suis dessus, mais on ne peut malheureusement pas dire qu'elle regorge d'exemple
C'est parce que c'est tout bête en fait, je te fais un exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$xml = <<< XML
<?xml version="1.0"?>
<root>
	<a>
		<b>Hello</b>
	</a>
</root>
XML;
 
$doc = new DOMDocument;
$doc->loadXML($xml);
 
$old_item = $doc->getElementsByTagName('b')->item(0);
$new_item = $doc->createElement('b', 'Bonjour');
 
$doc->getElementsByTagName('a')->item(0)->replaceChild($new_item, $old_item);
 
echo htmlspecialchars($doc->saveXML());
DOMNode::replaceChild permet notamment de remplacer n'importe quel type de noeud (text, attribute, cdata etc.)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 01h31.


 
 
 
 
Partenaires

Hébergement Web