🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #10683

Re: stockage de valeur et comparaison en XSL

#10683
From: 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.
Technical Details
Message-ID: <8odluf$vod$1@nnrp1.deja.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <P4sq5.3144$HF.10532891@nnrp3.proxad.net>

Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII
X-Google-Thread: 114f60,783ac71a9ec48ee6
X-Google-Attributes: gid114f60,public
From: Thierry Bezecourt <thbz@thbz.cx>
Subject: Re: stockage de valeur et comparaison en XSL
Date: 2000/08/28
Message-ID: <8odluf$vod$1@nnrp1.deja.com>
X-Deja-AN: 663443734
References: <P4sq5.3144$HF.10532891@nnrp3.proxad.net>
X-Http-Proxy: 1.0 srv66.globeid.com:8080 (Squid/2.3.STABLE1), 1.0 x57.deja.com:80 (Squid/1.1.22) for client unknown, 213.41.26.66
Organization: Deja.com - Before you buy.
X-Article-Creation-Date: Mon Aug 28 12:29:17 2000 GMT
X-MyDeja-Info: XMYDJUIDthrubis
Newsgroups: fr.comp.text.xml
X-Http-User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)