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 :

[XSLT]Afficher plusieurs balises element dans une ligne avant de l'afficher


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Par défaut [XSLT]Afficher plusieurs balises element dans une ligne avant de l'afficher
    Bonjour,

    Ca fait une semaine que je touche au XSL et j'ai une colle avec ce que je veux faire.
    J'espère que quelqu'un saura m'aider !!

    Voilà les données dans mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <section intitue="Intitule1>
      <line text="Texte de ligne 1">
        <keyword kwdword="texte" kwdlink="00001.html" />
      <line />
      <line text="Ligne de texte 2">
        <keyword kwdword="ligne" kwdlink="00002.html" />
        <keyword kwdword="texte" kwdlink="00001.html" />
      <line />
      <line text="Ligne de texte 3" />
    </section>
    Et je dois afficher ceci en html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Intitule1
      Ligne de <a href=00001.html">texte</a> 1
      <a href="00002.html">Ligne</a> de <a href=00001.html">texte</a> 2
      Ligne de texte 3
    Le problème ne se passe pas au niveau du lien, ni quand j'ai un keyword sur la ligne, ça marche nickel. Mais de quand j'ai deux liens voir plusieurs sur la même ligne de texte :

    En fait pour la ligne 2 j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="00002.html">Ligne</a> de texte 2Ligne de <a href=00001.html">texte</a> 2
    Voici mon bout de code xsl qui gère les élément "line" :

    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
    <xsl:template match="line">
        <ul>
          <xsl:choose>
            <xsl:when test="keyword/@kwdword!=''">
              <xsl:apply-templates select="keyword"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:choose>
                <xsl:when test="substring(@text, 1, 1) = '-'">
                  <li>
                    <xsl:value-of select="substring-after(@text,'-')"/>
                  </li>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="@text"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:otherwise>
          </xsl:choose>
        </ul>
      </xsl:template>
     
    <xsl:template match="line/keyword">
        <!-- Découpage de la ligne en cours et introduction du lien -->
     
        <xsl:value-of select="substring-before(../@text, @kwdword)"/>
     
        <xsl:element name="a">
          <xsl:attribute name="href">
            <xsl:value-of select="@kwdlink"/>
          </xsl:attribute>
          <xsl:value-of select="@kwdword"/>
        </xsl:element>
    Quelqu'un peut m'aider ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Par défaut
    Depuis ce midi j'ai avancé grâce à preceding-sibling

    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
     
          <xsl:variable name="chaine">
            <xsl:value-of select="substring-after(../@text, preceding-sibling::keyword/@kwdword)" />
          </xsl:variable>
     
        <xsl:value-of select="substring-before($chaine, @kwdword)"/>
     
        <xsl:element name="a">
          <xsl:attribute name="href">
            <xsl:value-of select="@kwdlink"/>
          </xsl:attribute>
          <xsl:value-of select="@kwdword"/>
        </xsl:element>
     
        <xsl:if test="position()=count(../keyword)">
     
          <xsl:value-of select="substring-after(../@text, @kwdword)" />
     
        </xsl:if>
    Ca me donne un bon résultat pour les deux premiers keyword.

    Avec 3 noeuds keyword, cette fonction preceding-sibling me donne tous les noeuds qui précèdent le noeud courant. Lorsque je suis sur le troisieme noeud keyword, preceding-sibling::keyword/@kwdword me donne le keyword1 et pas keyword2 (ce que j'attends).

    Quelqu'un a une solution ??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Par défaut
    Voilà j'ai trouvé tout seul, mais bon m'a fallu la journée ....

    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
     
        <xsl:variable name="position" select="position()-1" />
     
        <xsl:value-of select="substring-before(substring-after(../@text, ../keyword[position()=$position]/@kwdword), @kwdword)"/>
     
        <xsl:element name="a">
          <xsl:attribute name="href">
            <xsl:value-of select="@kwdlink"/>
          </xsl:attribute>
          <xsl:value-of select="@kwdword"/>
        </xsl:element>
     
        <xsl:if test="position()=count(../keyword)">
     
          <xsl:value-of select="substring-after(../@text, @kwdword)" />
     
        </xsl:if>
    Quand tu regardes le code tu te dit que c'est tout bête !! lol

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2009, 12h55
  2. Réponses: 2
    Dernier message: 17/03/2009, 14h20
  3. Réponses: 8
    Dernier message: 01/05/2007, 17h13
  4. 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
  5. [HTML] Plusieurs balises <html> dans une seule page???
    Par v4np13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/07/2005, 17h37

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