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 :

balises <td></td> en xsl ne marche pas [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut balises <td></td> en xsl ne marche pas
    Bonjour,

    Je voulais remplacer le mot toto par des balises </td><td>,
    donc si quelqu'un peut me dire comment faire car je n'ai réussi
    voici mon code xsl
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output 
      method="html"
      encoding="ISO-8859-1"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
    <xsl:template match="/">
    <table class="info_pro_thesaurus">
    	<tr>
    		<td>
    			<xsl:variable name="var1">0</xsl:variable>
    			<xsl:for-each select="PUBLICATION/THEMA">
    				<xsl:variable name= "title"><xsl:value-of select= "@label"/></xsl:variable>
    			<h3><xsl:value-of select="@label"/></h3>
    			<ul>
    				<xsl:for-each select="ARTICLE">
    					<xsl:variable name="numero" select="URL"/>
    					<li><a href="{$numero}"> <xsl:value-of select="TITRE"/>	</a></li>
    				</xsl:for-each>
    			</ul>
    				<xsl:if test="$title = 'Ecomanagement'">
    					<xsl:text>toto</xsl:text>
    				</xsl:if>
    				<xsl:if test="$title = 'Urbanisme'">
    					<xsl:text>toto</xsl:text>
    				</xsl:if>
    				<xsl:if test="$title = 'Transport'">
    					<xsl:text>toto</xsl:text>
    				</xsl:if>
     
    			</xsl:for-each>
    		</td>
    	</tr>
    </table>
    </xsl:template >
    </xsl:stylesheet>
    Merci
    Bonne journée

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Effectivement, en XSL il est impossible (à ma connaissance) de créer du XML invalide dans une sous-partie, même si le XML total résultant serait valide.

    Ecrire </td><td> n'est donc pas possible en XSLT, il faut penser ton code différemment afin de n'utiliser que des sous-parties contenant du XML valide.

    Ceci dit, ce n'est qu'une constatation personnelle, je n'ai rien lu allant spécifiquement dans ce sens donc s'il se trouve qu'il y'a un moyen de le faire, je serai aussi intéressé que toi de le connaître.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Effectivement, en XSL il est impossible (à ma connaissance) de créer du XML invalide dans une sous-partie, même si le XML total résultant serait valide.

    Ecrire </td><td> n'est donc pas possible en XSLT, il faut penser ton code différemment afin de n'utiliser que des sous-parties contenant du XML valide.

    Ceci dit, ce n'est qu'une constatation personnelle, je n'ai rien lu allant spécifiquement dans ce sens donc s'il se trouve qu'il y'a un moyen de le faire, je serai aussi intéressé que toi de le connaître.
    C'est en principe à ça que sert disable-output-escaping. Mais bon, tous les outils ne le gèrent pas bien.

    Dans le cas présent, la bonne méthode serait plutôt de déterminer quand on veut créer des balises <td> et </td>, ainsi que ce qu'on met à l'intérieur.
    Mais bon, dans le cas présent c'est pas forcément évident.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est en principe à ça que sert disable-output-escaping. Mais bon, tous les outils ne le gèrent pas bien.

    Dans le cas présent, la bonne méthode serait plutôt de déterminer quand on veut créer des balises <td> et </td>, ainsi que ce qu'on met à l'intérieur.
    Mais bon, dans le cas présent c'est pas forcément évident.
    en fait l'idée en général est après chaque 4 THEMA(@label) je ferme le </td> et j'ouvre une autre<td>. Donc il me faut un compteur, mais comme je connais les nom de 4ème, 8ème THEMA c'est pour ça j'ai mis un if
    je résoudre d'abord le problème des <td> puis je m'occuper de compteur
    voilà !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="THEMA[@label][position() mod 4 = 1]">
      <td>
        <!-- Insérer le THEMA et tout ce qui le suit -->
      </td>
    </xsl:for-each>
    Mais bon, c'est pas super évident à faire, il faut bien le reconnaître.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="THEMA[@label][position() mod 4 = 1]">
      <td>
        <!-- Insérer le THEMA et tout ce qui le suit -->
      </td>
    </xsl:for-each>
    Mais bon, c'est pas super évident à faire, il faut bien le reconnaître.
    Merci pour ce code, mais est ce que vous pouvez m'expliquer un peut ce code position() mod 4 = 1 ?
    mnt il m'affiche le 1ère, 4ème et 8ème et non les autres thèmes, moi je veux dans le premier <td>le 4 premier thema </td> <td> 5,6,7 et 8 ème THEMA</td> et ainsi de suite, chaque 4 THEMA dans un TD

    en fait, mon problématique est le suivant :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <PUBLICATION REF="ENVIRONNEMENT MAGAZINE">
    <THEMA REF="EAU" label="Eau">
    <ARTICLE id="75232">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="73604">
    <TITRE>bla bla bla/TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="71009">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    </THEMA>
    <THEMA REF="DECHETS" label="Déchets">
    <ARTICLE id="76115">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="76093">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="76127">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    </THEMA>
    .........
    </PUBLICATION>
    je veux afficher les THEMA (groupe de 4, chaque 4 THEMA dans un td)dans des <td></td>

    Merci bcp

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par victoires Voir le message
    Merci pour ce code, mais est ce que vous pouvez m'expliquer un peut ce code position() mod 4 = 1 ?
    mnt il m'affiche le 1ère, 4ème et 8ème et non les autres thèmes, moi je veux dans le premier <td>le 4 premier thema </td> <td> 5,6,7 et 8 ème THEMA</td> et ainsi de suite, chaque 4 THEMA dans un TD
    Euh... C'est... Une bidouille d'informaticien. C'est de la technologie, c'est compliqué. Je me demande s'il vaudrait pas mieux utiliser les disable-output-escaping, après tout.

    'Fin bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="THEMA[position() mod 4 = 1]">
      <td>
        <xsl:for-each select=".|following-sibling::*[4 > position()]">
          <!-- Afficher ce p*** de THEMA -->
        </xsl:for-each>
      </td>
    </xsl:for-each>

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Euh... C'est... Une bidouille d'informaticien. C'est de la technologie, c'est compliqué. Je me demande s'il vaudrait pas mieux utiliser les disable-output-escaping, après tout.

    'Fin bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="THEMA[position() mod 4 = 1]">
      <td>
        <xsl:for-each select=".|following-sibling::*[4 > position()]">
          <!-- Afficher ce p*** de THEMA -->
        </xsl:for-each>
      </td>
    </xsl:for-each>
    Bonjour,

    Merci bcp pour le code ça fonctionne

    bonne journée

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par victoires Voir le message
    Bonjour,

    Merci bcp pour le code ça fonctionne

    bonne journée
    Rebonjour, et désolé si je pause bcp des question mais je suis nouveau avec le XML et XSL c'est pour ça

    juste une autre petit question :
    si le xml prend ce forme :

    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
    41
    42
    43
    44
    45
    46
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ALL>
    <PUBLICATION REF="ENVIRONNEMENT">
    <THEMA REF="EAU" label="Eau">
    <ARTICLE id="75232">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="73604">
    <TITRE>bla bla bla/TITRE>
    <URL>lien</URL>
    </ARTICLE>
    </PUBLICATION>
    <PUBLICATION REF="EMM">
    <THEMA REF="EAU" label="Eau">
    <ARTICLE id="75232">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="73604">
    <TITRE>bla bla bla/TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="71009">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    </THEMA>
    <THEMA REF="DECHETS" label="Déchets">
    <ARTICLE id="76115">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="76093">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    <ARTICLE id="76127">
    <TITRE>bla bla bla</TITRE>
    <URL>lien</URL>
    </ARTICLE>
    </THEMA>
    .........
    </PUBLICATION>
    </ALL>
    je voulais faire la même chose, mais juste pour la publication qui a comme REF ="EMM" ?

    j'ai ajouté cette condition mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:if test="ALL/PUBLICATION[@REF] = 'EMM' ">
       <!-- le reste du code -->
    </xsl:if>
    Merci d'avance,

  10. #10
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Il est conseillé d'en apprendre un peu plus sur XPath...
    Dans ton cas, la condition se fait ainsi :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="ALL/PUBLICATION[@REF='EMM'] ">
       <!-- le reste du code -->
    </xsl:if>

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 97
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par neilbgr Voir le message
    Il est conseillé d'en apprendre un peu plus sur XPath...
    Dans ton cas, la condition se fait ainsi :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="ALL/PUBLICATION[@REF='EMM'] ">
       <!-- le reste du code -->
    </xsl:if>
    Merci bien, ça marche aussi pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="ALL/PUBLICATION[@REF='EMM']/THEMA[position() mod 4 = 1]">
    Super !

    bon weekend

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. code javascript ne marche pas balise script
    Par unmaxdemily dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2009, 00h46
  2. [Mail] Marche pas avec balise
    Par Azharis dans le forum Langage
    Réponses: 6
    Dernier message: 07/11/2008, 10h42
  3. [HTML] la balise objet marche pas dans le *%?@ d'internet explorer
    Par goldor dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/05/2008, 09h12
  4. [XHTML] Title dans une balise select ne marche pas
    Par mcdelay dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 13/08/2007, 11h10
  5. Balise <PRE> marche pas dans un form
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 14/11/2005, 09h20

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