From: Linda Pelchat (lpelchat@soquij.qc.ca)
Date: 04/01/2002 - 13:28
----Message d'origine-----
Le problème pourrait peut-être être contourné en ajoutant une condition
sur le numéro de facture.
Linda
De : Stéphanie LOPERA [mailto:stephanie.lopera@lafon.fr]
Envoyé : vendredi 4 janvier 2002 11:29
À : XMLfr.org
Objet : [xml-tech] XSL : fonctionnement de preceding::
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(.=precedi
n
g: :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]
/mo
nt ant)"/>
</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)
--
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
--
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
|