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

HTML Discussion :

Problème de HTML conditionné par XSL


Sujet :

HTML

  1. #1
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut Problème de HTML conditionné par XSL
    Bonjour,

    je désire conditionner la création de d'un <TR> et d'un </TR> à l'aide de XSL, j'ai N éléments qui doivent se présenter dans un tableau dont le nombre de colonnes ne doit pas éxcéder 3, voici le code XSL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table border="0" width="100%" cellpadding="0" cellspacing="0" align="center">
     
    <xsl:for-each select="document/element">
    	<xsl:if test="(position() = 1) or ((position() mod 4 = 0) and (position() != last()))"><tr></xsl:if>
    	<td>ELEMENT</td>
    	<xsl:if test="(position() = last()) or (position() mod 3 = 0)"></tr></xsl:if>
    </xsl:for-each>
     
    </table>
    Seulement voilà, la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="(position() = 1) or (position() mod 4 = 0)"><tr></xsl:if>
    indique une erreur à cause du fait que le <TR> attend un </TR> avant le </xsl:if>

    Merci pour vos suggestions

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Tu as un problème avec le XSL qui considère une balise A ouvrante, une balise B ouvrante et une balise A fermante (or il faut fermer la B avant la A).
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="(position() = 1) or (position() mod 4 = 0)">&lt;tr&gt;</xsl:if>

  3. #3
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    j'ai essayé mais &lt;tr&gt; affiche <tr> comme un texte normal, ce n'est pas considéré comme une balise par le navigateur

  4. #4
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    peut-être en utilisant <xsl:processing-instruction> mais jette un coup d'oeil sur le net pour voir comment l'utiliser.

  5. #5
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La balise de fin xsl:processing-instruction ne correspond pas à la balise de début tr.
    pas bon merci pour ton aide, c'est vraiment pénible comme erreur ...

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Tu as quoi en entête de ton XSL ?
    Il faut que tu es un truc de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" indent="yes" encoding="utf-8" /> <!--method="xml" si tu veux du XHTML en sortie-->
    <xsl:strip-space elements="*"/>

  7. #7
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    j'ai le même en-tête, et toujours le même problème
    c'est un peu lourd ...

    edit: je viens de tomber sur ce défi qui devrait m'aider http://www.developpez.net/forums/sho...56&postcount=2

    re-edit : rien à faire, je vois les <tr> affichés en clair sur la page au lieu d'être interprétés si j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>



  8. #8
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    lol je viens de remarquer que j'ai un résultat différent sous IE6 et sous Firefox

    Sous IE6 les &lt;tr&gt; et &lt;tr&gt; sont bien interprétés comme des lignes et çà donne le résultat que je veux, par contre ce n'est pas le cas sous Firefox 1.5.0.6 qui lui écrit toujours <tr> en clair comme du texte banal mais que faire

  9. #9
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    mais tu ne peux pas tourner ton problème différemment et mettre la balse <tr> autre part ?

    Peut-être en utilisant une variable comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:variable name="ligne">
      <xsl:value-of select="&lt;tr&gt;"/>
    </xsl:variable>
     
    <xsl:value-of select="$ligne" disable-output-escaping="yes"/>

  10. #10
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    je vois pas trop comment faire autrement, ce que je constate c'est juste une différence d'interprétation de "&lt;tr&gt;" par firefox et internet explorer, voici les captures d'écran du résultat sur les 2 navigateurs :

    Internet Explorer 6 et 7 :



    Firefox 1.5.0.6 :



    NB: Ne pas faire attention au fait que les images des articles soient dans un ordre différent, leur disposition est aleatoire (ORDER BY RAND())

  11. #11
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    pourquoi tu n'utilises pas des div ou des p plutôt qu'un tableau?

  12. #12
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    utiliser des div ne me permettrait pas d'avoir un alignement correct, et puis pourquoi ne pourrais-je pas utiliser un tableau ?

    les solutions du défi posté dans ce forum utilisent bien des tableaux par ailleurs et puis cela fonctionne parfaitement sous Internet Explorer

    je vais farfouiller un peu plus du coté de la doc xsl de firefox ... merci pour tes suggestions en tous les cas

  13. #13
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    j'ai trouvé ça pour toi, je sais pas si tu l'as vu ou pas, c'est un ancien post de developpez.net

  14. #14
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Autre chose :
    -> la base : ce fichier xml:
    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
    19
    20
    21
    22
    23
     
    <elements>
           <element>
                   <nom>NOM1</nom>
                   <prenom>Prenom1</prenom>
           </element>
           <element>
                   <nom>NOM2</nom>
                   <prenom>Prenom2</prenom>
           </element>
           <element>
                   <nom>NOM3</nom>
                   <prenom>Prenom3</prenom>
           </element>
           <element>
                   <nom>NOM4</nom>
                   <prenom>Prenom4</prenom>
           </element>
           <element>
                   <nom>NOM5</nom>
                   <prenom>Prenom5</prenom>
           </element>
    </elements>
    jusqu' à n.

    -> le but : ce type fichier html en sortie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <table>
           <tr>
                   <td>NOM1 <br/> prenom1</td>
                   <td>nom2 <br/> prenom2</td>
           </tr>
           <tr>
                   <td>NOM3 <br/> prenom3</td>
                   <td>nom4 <br/> prenom4</td>
           </tr>
           <tr>
                   <td>nom n <br /> prenom n </td>
                   <td>&nbsp;</td>
           </tr>
    </table>
    ->Comment faire ? Comme ça :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="html" version="1.0" encoding="ISO-8859-1"
    indent="yes"/>
     
     <xsl:template match="/">
      <html>
       <body>
        <table>
         <xsl:apply-templates select="elements/element" mode="premiers"/>
        </table>
       </body>
      </html>
     </xsl:template>
     
     <xsl:template match="element[(position() mod 2) = 1]" mode="premiers">
      <tr>
       <xsl:apply-templates select="."/>
        <xsl:choose>
         <xsl:when test="following-sibling::element[1]">
          <xsl:apply-templates select="following-sibling::element[1]"/>
         </xsl:when>
         <xsl:otherwise>
          <td> </td>
         </xsl:otherwise>
        </xsl:choose>
      </tr>
     </xsl:template>
     
     <xsl:template match="element" mode="premiers"/>
     
     <xsl:template match="element">
      <td>
       <xsl:value-of select="nom"/>
       <br/>
       <xsl:value-of select="prenom"/>
      </td>
     </xsl:template>
     
    </xsl:stylesheet>
    Si ça peut t'aider.

  15. #15
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    cette solution me plaît beaucoup, j'ai quelques questions:

    que signifie : mode="premiers"

    que signifie : following-sibling::element[1]

    si je désire 3 colonnes et que j'écris position() mod 3 j'ai l'impression que la 3eme colonne passe à la trappe ...

  16. #16
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Citation Envoyé par krapno
    cette solution me plaît beaucoup, j'ai quelques questions:
    que signifie : mode="premiers"
    que signifie : following-sibling::element[1]
    Il existe un outil absolument merveilleux que je suis persuadé que tu connais, petit définition :
    Google (Nasdaq : GOOG, LSE : GGEA) est une société fondée le 7 septembre 1998 dans la Silicon Valley en Californie par Larry Page et Sergey Brin, auteurs du moteur de recherche Google. Depuis 2001, Eric Schmidt en est le PDG (CEO). La société compte environ 8000 employés dont la plupart travaillent au siège mondial : le Googleplex à Mountain View. Google s'est donné comme mission d'« organiser l'information à l'échelle mondiale et de la rendre universellement accessible et utile ».

    Google aurait indexé plus de 8 milliards de pages Web, 1 milliard d'images et 1 milliard de messages Usenet. En novembre 2005, les créateurs de Google annonçaient avoir multiplié par mille le nombre de pages indexées depuis la création du moteur de recherche, soit un total de 24 milliards de pages.

    cf : http://fr.wikipedia.org/wiki/Google
    je suis sur que parmis ces 24 milliards il y en a quelques unes qui répondent à ta question


    Sinon : mode permet de donner une identité à ton template pour pouvoir le réutiliser plusieurs fois (tu n'as qu'à changer de mode pour le réutiliser)
    following-sibling permet de sélectionner, dans ton arbre XML, les "frères suivants"

    Je les utilise peu souvent donc vérifie tout de même.

  17. #17
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    sympa de me présenter ce google, je ne connaissais pas, j'utilise plutôt altavista.com en fait

    merci pour tes réponses

  18. #18
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    si ton problème est résolu pense à mettre

  19. #19
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    pas encore, je n'ai pas eu le temps de vraiment appliquer ta proposition

  20. #20
    Membre confirmé Avatar de krapno
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 180
    Par défaut
    salut, me revoilà, j'ai du mettre de coté mon developpement pendant quelques jours à cause du boulot, bref j'en suis un peu au même point car après avoir testé le code proposé dans le défi de cette page :

    http://www.developpez.net/forums/sho...56&postcount=2

    il s'avère que Firefox n'interprète absoluement pas de la même manière l'écriture de &lt;tr&gt; et &lt;tr&gt;

    par ailleurs je ne peux pas conditionner l'écriture de <tr> ou </tr> par des:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test=""><tr></xsl:if>
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test=""></tr></xsl:if>
    sous peine d'avoir une erreur liée à la création d'une balise ouvrante <tr> non refermée par </tr> avant le </xsl:if>

    La balise de fin xsl:if ne correspond pas à la balise de début tr.
    bref je n'arrive à avoir un affichage correct que sous IE, ce qui est deja pas mal mais bien dommage pour mozilla

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XSLT 1.0] Transformer un XML en html par XSL
    Par MEH2010DDI dans le forum XSL/XSLT/XPATH
    Réponses: 16
    Dernier message: 11/01/2014, 17h40
  2. Q: inserer SVG generé par XSL en HTML
    Par Rainlife dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/03/2007, 21h41
  3. problème en html (affichage)
    Par lora dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/12/2004, 19h03
  4. Accentuation - pages html générées par Java
    Par phoebe dans le forum Linux
    Réponses: 4
    Dernier message: 28/05/2004, 12h49
  5. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27

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