From: Stéphanie LOPERA (stephanie.lopera@lafon.fr)
Date: 04/01/2002 - 10:29
Bonjour,
J'ai un résultat inattendu lors de l'utilisation d'un preceding:: dans
le filtre d'un xsl:for-each.
En fait, je boucle sur un niveau 1 à l'intérieur duquel je boucle sur le
niveau 2. Pour le niveau 2, je ne veux que des codes que je n'ai pas
déja rencontrés. J'utilise donc un "code[not(.=preceding::code)]". Cela
marche bien lors de ma première boucle au niveau 1 mais lors de ma
deuxième boucle, tous les codes qui ont été rencontrés lors de la
première boucle ne sont pas pris en compte.
Avez vous une idée de la raison de cela ? Et une solution pour y pallier
?
Pour exemple, je vous mets ci-dessous un xml, son xsl et le résultat (le
tout simplifié, bien sur !) :
XML :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="C:\CCPTE\test.xsl"?>
<factures>
<facture>
<nofacture>1</nofacture>
<produit><code>1</code><montant>1</montant></produit>
<produit><code>1</code><montant>2</montant></produit>
<produit><code>2</code><montant>3</montant></produit>
</facture>
<facture>
<nofacture>2</nofacture>
<produit><code>1</code><montant>4</montant></produit>
<produit><code>3</code><montant>5</montant></produit>
</facture>
</factures>
XSL :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="/factures/facture">
<xsl:variable name="vfacture" select="nofacture"/>
facture no : <xsl:value-of select="$vfacture"/>
<xsl:for-each
select="/factures/facture[nofacture=$vfacture]/produit/code[not(.=preceding::code)]">
<xsl:sort select="."/>
<xsl:variable name="vcode" select="." />
produit : <xsl:value-of select="."/>
montant total : <xsl:value-of
select="sum(/factures/facture[nofacture=$vfacture]/produit[code=$vcode]/montant)"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Le résultat :
facture no : 1
produit : 1
montant total : 3
produit : 2
montant total : 3
facture no : 2
produit : 3
montant total : 5
Vous pouvez voir que le produit 1 n'apparait pas !
Merci d'avance pour votre aide.
Stéphanie LOPERA
--
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
|