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

Langage PHP Discussion :

remplacer des balises html d'une variable


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    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.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    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.

    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.

    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 ?

    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    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.)

    <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é.

    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/>

    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.

    Regarde la doc
    Je suis dessus, mais on ne peut malheureusement pas dire qu'elle regorge d'exemple

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

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

    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 : 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
    $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.)

Discussions similaires

  1. [PHP 5.2] Remplacer des balises html par des balises encodées
    Par gtraxx dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2009, 21h54
  2. Insérer des balises HTML dans une zone de texte
    Par selinav dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/12/2008, 20h52
  3. Balise html dans une variable
    Par saraza dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2008, 13h12
  4. Inserer des balise html dans une zone de text du rapport
    Par jacky2677 dans le forum iReport
    Réponses: 1
    Dernier message: 12/08/2008, 12h08
  5. Afficher des balises HTML dans une chaine javascript
    Par lapaupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2007, 10h19

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