From: Eric van der Vlist (vdv@dyomedea.com)
Date: 28/11/2002 - 08:05
On Wed, 2002-11-27 at 16:36, Gregoor, Van Der Eyken wrote:
>
> Bonjour
>
> il s'agit d'une question/affirmation je souhaite simplement comprendre réellement.
>
> 1. un <xsl:template match="Product[position() mod 4=1]" mode="m1"> appelé par
>
> un <xsl:apply-templates select="//Product[@Univers=current()/@Univers]" mode="m1"
>
> 2. un <xsl:template match="Product" mode="m2"> appelé par
>
> un <xsl:apply-templates select="//Product[@Univers=current()/@Univers][position() mod 4=1]" mode="m2"
>
>
> les templates m1 et m2 utilisant les predicat tour a tour (le but etant de mettre 4 produit ds un <tr/>
>
> following-sibling::Product[@Univers=current()/@Univers][1]
> following-sibling::Product[@Univers=current()/@Univers][2]
> following-sibling::Product[@Univers=current()/@Univers][3]
>
> il s'avère que la position est "faussée", j'ai l'impression qu'il reprend l'axe original (pas celui correspondant uniqument aux produits de cette univers), or
> j'arrive à la conclusion que
> si il est exact que //Product[@Univers=current()/@Univers][position() mod 4=1] agissent en 2 temps (prod univers) et ensuite 1 sur 4
> un template match="Product[position() mod 4=1]" est évalué hors contexte,
>
> Quelqu'un peut il me dire si ce raisonnement est correct.
Je ne suis pas certain de bien comprender votre formulation :-> ...
"position()" est toujours relatif à la liste de noeuds en cours de
sélection.
Reprenons vos sélections:
<xsl:apply-templates select="//Product[@Univers=current()/@Univers]"
mode="m1"/>
La liste de noeuds est "//Product[@Univers=current()/@Univers]"
<xsl:template match="Product[position() mod 4=1]" mode="m1">
position() est évaluée par rapport à la liste de noeuds qui est toujours
"//Product[@Univers=current()/@Univers]" (au passage, il faudra penser à
mettre un template par défaut pour ceux dont la position n'est pas égale
à 1 modulo 4).
<xsl:apply-templates
select="//Product[@Univers=current()/@Univers][position() mod 4=1]"
mode="m2"/>
position() est maintenant évaluée par rapport à une nouvelle liste de
noeuds qui est (à nouveau) l'ensemble des noeuds
//Product[@Univers=current()/@Univers]
<xsl:template match="Product" mode="m2">
et ce template est sélectionné en permanence.
Pourquoi ne pas écrire plutôt une variation sur le thème:
<xsl:apply-templates
select="//Product[@Univers=current()/@Univers][position() mod 4 = 1]"
mode="tr"/>
...
<xsl:template match="Product" mode="tr">
<tr>
<xsl:apply-template select="." mode="colonne" mode="td"/>
<xsl:apply-template select="following-sibling::Product[1]"
mode="colonne" mode="td"/>
<xsl:apply-template select="following-sibling::Product[2]"
mode="colonne" mode="td"/>
<xsl:apply-template select="following-sibling::Product[3]"
mode="colonne" mode="td"/>
</tr>
</xsl:template>
???
Cordialement,
Eric van der Vlist
--
See you in Baltimore.
http://www.xmlconference.org/xmlusa/
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|