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

XSL/XSLT/XPATH XML Discussion :

Suppression de la balise fermante img


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut Suppression de la balise fermante img
    Bonjour,

    J'ai un comportement que je ne parviens pas à m'expliquer:
    Code xsl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template name="lien_modif">
       <td class="modifier">
          <a href="index.php?module=member&amp;action=mod&amp;id={user_id}">
             <img src="style/images/bt_mod.png" alt="Modifier" title="Modifier" />
          </a>
       </td>
    </xsl:template>
    Résultat HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <td class="modifier">
       <a href="index.php?module=member&amp;action=mod&amp;id=xxxx">
          <img src="style/images/bt_mod.png" alt="Modifier" title="Modifier">
       </a>
    </td>
    Bref, le proc me vire la fermeture de la balise img (idem avec <img></img>).
    J'ai volontairement simplifié l'exemple, mais j'ai l'impression de passer à côté d'une erreur simple.

    Si quelque chose vous saute aux yeux ...
    Un grand merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Par défaut
    C'est juste une idée comme ça :

    essais de rajouter ça en haut de ta feuille xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="html" />

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Merci pour cette réponse rapide, mais j'ai déjà précisé ces paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:output 
      method="html"
      encoding="ISO-8859-15"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 167
    Par défaut
    Ok, alors comme ça, ça devrait marcher :

    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="style/images/bt_mod.png" alt="Modifier" title="Modifier" />
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:element name="img">
      <xsl:attribute name="src">style/images/bt_mod.png</xsl:attribute>
      <xsl:attribute name="alt">Modifier</xsl:attribute>
      <xsl:attribute name="title">Modifier</xsl:attribute>
    </xsl:element>

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    C'est l'inverse, en fait. En HTML <img> n'a pas besoin de balise fermante ou auto-fermante. (En réalité c'est même plus grave : il ne doit pas y en avoir. Cela n'est recommandé que pour certains formats qui ne sont pas du HTML mais essaient d'être aussi compatibles HTML que possible. Comme XHTML par exemple.)

    Donc si on précise que l'output est en HTML, le transformateur peut se passer d'en mettre. Je suppose qu'il fait comme il veut.

    Ce n'est pas un problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Pas de changement ^^
    J'avais déjà tenté cette voie.
    Je ne m'explique pas ce comportement.

    Voici à tout hasard un extrait de mon code php:
    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
    //Conversion en XML
    $oDatasXml = new XmlProcess('liste');  //Liste étant la racine
    $oDatasXml->creerNode($aDatas, "membre");  //On a ici les datas en XML
    $racine = simplexml_import_dom($oDatasXml); 
     
    //Moteur XSLT
    $xsl = new DOMDocument;
    $xsl->load(CHEMIN_V.'xsl/vue_liste_members.xsl');  //C'est le xsl plus haut
    $proc = new XSLTProcessor();
    $proc->importStyleSheet($xsl);
     
    //Transfo
    $result = $proc->transformToXML($oDatasXml)
     
    //Affichage
    echo $result;
    Si rien ne vous saute aux yeux, je vais commencer par tenter de reproduire ce bug de façon isolée, et si je ne m'en sors pas tout seul, je publierai la totalité du code.
    Ca m'ennuie de progresser à l'aveugle :/
    Encore un grand merci pour ces réponses.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Ah mais pas la peine d'insister, tu n'y arriveras pas. À moins qu'il y ait une option dans XSLTProcessor de php pour traiter comme ça les balises HTML <img>.

    Ce que tu peux faire, c'est par exemple mettre du <img src="..." /> en tant que texte avec un disable-output-escaping="yes"

    Ou alors, générer du XHTML à la place.
    Ou alors, générer du XHTML, puis le retraiter ensuite avec la bibliothèque XML, pour le réécrire sous forme de HTML 4.01. Faisable, mais long, et demande de solides connaissances.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est l'inverse, en fait. En HTML <img> n'a pas besoin de balise fermante ou auto-fermante. (En réalité c'est même plus grave : il ne doit pas y en avoir. Cela n'est recommandé que pour certains formats qui ne sont pas du HTML mais essaient d'être aussi compatibles HTML que possible. Comme XHTML par exemple.)

    Donc si on précise que l'output est en HTML, le transformateur peut se passer d'en mettre. Je suppose qu'il fait comme il veut.

    Ce n'est pas un problème.
    J'avoue que c'est un peu du pinaillage de ma part.
    Mais voici la sortie du validator W3C:
    Line 215, Column 163: end tag for "img" omitted, but OMITTAG NO was specified
    …mg src="style/images/bt_mod.png" alt="Modifier" title="Modifier"></a></td>
    You may have neglected to close an element, or perhaps you meant to "self-close" an element, that is, ending it with "/>" instead of ">".
    Je précise que je prends de grandes libertés avec le standard strict (et même transitional), mais c'est vraiment pour comprendre pourquoi le XSLTProcessor ne gère pas ce problème. Je suis très peu familiarisé avec, mais aimerais ne pas être confronté avec des des bugs de sortie dans des cas plus complexes.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Le validateur ne fait aucun warning de ce genre pour du HTML 4.01 strict. Enfin, pas avec moi. (Je me rends compte d'ailleurs qu'il se plaint si je termine la balise avec un />.)
    Comment t'y prends-tu pour valider ?

    mais c'est vraiment pour comprendre pourquoi le XSLTProcessor ne gère pas ce problème.
    Il n'y a pas de problème. On pourrait même dire qu'il fait ce qu'il faut.

    Je suis très peu familiarisé avec, mais aimerais ne pas être confronté avec des des bugs de sortie dans des cas plus complexes.
    En général, mettre /> ou > en fin de <img> n'est pas générateur de bugs avec le HTML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    En fait, selon les navigateurs (mais c'est comme d'habitude Internet Explorer qui pose d'abord problème), il y a aussi la situation où une balise auto-fermante n'est pas autorisée !

    Le cas le plus connu est celui de <script/> qui est très mal traité.

    II m'arrive de rajouter des <xsl:text/> dans mes transformations pour que la sérialisation du résultat en XML ne me génère pas de balise auto-fermante mais bien une balise ouvrante immédiatement suivie d'une balise fermante !

    -Alain

  11. #11
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    bonne remarque Alain !

    A ma connaissance, seules ces deux balises (img et script) peuvent causer des soucis !

  12. #12
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,
    J'avais le même problème, je l'ai résolu en choisissant "xml" comme output method, cela conserve un balisage auto-fermant correct.

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Précisons que "xml" est le output format par défaut. Autrement dit, si on ne demande pas un output format texte ou HTML, alors ce sera du XML.

    Précisons aussi que HTML n'est pas un format XML. C'est XHTML, qui l'est. Bon, dans le monde réel ça n'a pas forcément d'importance, mais c'est à savoir pour les cas où ça en a.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [DOM] Génération de balises fermantes comme <img/>
    Par geforce dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/04/2010, 01h51
  2. [XML] [EXPAT] Balise fermante
    Par fmichael dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/07/2007, 00h19
  3. [js] suppression du contenu balise script
    Par TERRIBLE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/02/2007, 09h45
  4. Réponses: 4
    Dernier message: 16/07/2006, 15h00
  5. Réponses: 7
    Dernier message: 18/09/2005, 00h38

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