🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fr.comp.text.xml
2 messages
2 total messages Started by Benoit ROSAZ Mon, 28 Aug 2000 00:00
stockage de valeur et comparaison en XSL
#10682
Author: Benoit ROSAZ
Date: Mon, 28 Aug 2000 00:00
19 lines
1391 bytes
En gros ce que je veut faire c'est
si le corps est different alors je l'affiche !
si il est identique (pour ne pas avoir de redondance) je ne fait rien

en fait a chaque boucle (each), il stocke "titre/Le_Type" dans "Le_Type_Old"
et si dans la boucle d'apres "titre/Le_Type" = "Le_Type_Old"
alors je n'afiche pas "titre/Le_Type"

est ce que c'est correct ?
comment est que je peut stocker "titre/Le_Type" dans "Le_Type_Old"
sinon comment faire ?

<xsl:for-each select="element">
    <xsl:sort select="titre/Le_Type"/>
    <xsl:if test="not(titre/Le_Type=Le_Type_Old)">
     <xsl:apply-templates select="titre/Le_Type"/>
    </xsl:if>
     <xsl:variable name="Le_Type_Old" select="titre/Le_Type"/>
</xsl:for-each>
Re: stockage de valeur et comparaison en XSL
#10683
Author: Thierry Bezecourt
Date: Mon, 28 Aug 2000 00:00
62 lines
2759 bytes
In article <P4sq5.3144$HF.10532891@nnrp3.proxad.net>,
  "Benoit ROSAZ" <PasDeSpam@chezmoi.com> wrote:
> En gros ce que je veut faire c'est
> si le corps est different alors je l'affiche !
> si il est identique (pour ne pas avoir de redondance) je ne fait rien
>
> en fait a chaque boucle (each), il stocke "titre/Le_Type"
> dans "Le_Type_Old" et si dans la boucle d'apres
> "titre/Le_Type" = "Le_Type_Old" alors je n'afiche pas
> "titre/Le_Type"

Attention, les variables, dans XSL, ont ceci de particulier qu'elles ne
sont pas variables. Voir
http://www.dpawson.freeserve.co.uk/xsl/N8090.html#N25653 pour une
explication de ce fait (en gros, XSL s'inspire des langages
fonctionnels).

> <xsl:for-each select="element">
>     <xsl:sort select="titre/Le_Type"/>
>     <xsl:if test="not(titre/Le_Type=Le_Type_Old)">
>      <xsl:apply-templates select="titre/Le_Type"/>
>     </xsl:if>
>      <xsl:variable name="Le_Type_Old" select="titre/Le_Type"/>
> </xsl:for-each>

Quand on ne peut pas changer la valeur d'une variable dans une
fonction, on utilise la r�cursion. Par exemple :

  <!-- J'appelle le template "element" sur le premier element -->
  <xsl:apply-templates select="element[1]">
    <xsl:sort select="titre/Le_Type" />
  </xsl:apply-templates>

avec le template suivant pour "element" :

<xsl:template match="element">
  <xsl:param name="Le_Type_Old" />

  <xsl:if test="not(titre/Le_Type=$Le_Type_Old)">
    <xsl:apply-templates select="titre/Le_Type" />
  </xsl:if>

  <!-- R�cursion : je rappelle le template pour l'�l�ment
       suivant, en passant le type courant en param�tre -->
  <xsl:apply-templates
      select="following-sibling::element[position()=1]">
    <xsl:with-param name="Le_Type_Old">
      <xsl:value-of select="titre/Le_Type" />
    </xsl:with-param>
  </xsl:apply-templates>
</xsl:template>


Comme quoi XSLT est une sorte de revanche de Lisp.

--
Thierry B�zecourt
http://www.thbz.cx


Sent via Deja.com http://www.deja.com/
Before you buy.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads