From: Alain COUTHURES (alain.couthures@lafon.fr)
Date: 20/07/2001 - 11:23
Merci de votre réponse.
J'avais déjà trouvé l'explication dans l'aide MSXML et, maintenant, je vais
utiliser :
<xsl:variable name="cval" select="string(/a/b/c)"/>
car c'est bien seulement la valeur du premier élément c que je veux affecter à la
variable pour ensuite faire les "count" et comparer leurs résultats.
Dans ce cas, je trouve qu'il eut été préférable d'avoir à utiliser une autre
fonction avec un nom plus adapté, du style "first-of()"...
Ma confusion est venue du fait qu'il semble y avoir des appels implicites à la
fonction string(). Par exemple :
<xsl:value-of select="/a/b/c"/>
et
<xsl:value-of select="string(/a/b/c)"/>
produisent le même résultat... Ici, la liste de noeuds n'est pas traitée en tant
que telle.
N'est-ce pas un manque de rigueur de XSLT ?
Merci de votre avis
Alain COUTHURES
LAFON SA - Equipements pétroliers
Eric van der Vlist a écrit :
> Bonjour,
>
> Alain COUTHURES wrote:
> >
> > Bonjour,
> >
> > J'ai constaté un comportement bizarre de MSXML3 et MSXML3 SP1 vis à vis des
> > variables XSL.
>
> Pas si bizarre que cela ;=) ...
>
> > Voici un document XML simple pour faire ressortir ce problème :
> >
> > <a>
> > <b>
> > <c>C1</c>
> > </b>
> > <b>
> > <c>C2</c>
> > </b>
> > </a>
> >
> > et la feuille de style suivante :
> >
> > <xsl:template match="/">
> > <html>
> > <body>
> > <p>Total : <xsl:value-of select="count(/a/b)"/></p>
> > <xsl:variable name="cval" select="/a/b/c"/>
>
> Cette instruction affecte à la variable cval la liste des noeuds
> /a/b/c", c'est à dire ici "<c>C1</c>" et "<c>C2</c>
>
> > <p>Total c=C1 : <xsl:value-of
> > select="count(/a/b[c=$cval])"/></p>
>
> Celle ci compte les noeuds /a/b pour lesquels la liste des noeuds "c"
> est "égale" à la liste contenue dans la variable $cval.
>
> Que dit XPath à propos des comparaisons de listes de noeuds [1] ?
>
> [1] http://xmlfr.org/w3c/TR/xpath/#booleans
>
> "Si les deux objets à comparer sont des ensembles de noeuds, alors la
> comparaison ne sera vraie que si et seulement si il y a un noeud dans
> chacun des deux ensembles qui satisfassent à la condition de comparaison
> de type string-values."
>
> Ici, c'est toujours le cas et le résultat donne, très logiquement, 2.
>
> > </body>
> > </html>
> > </xsl:template>
> >
> > Le résultat produit est bizarre :
> >
> > Total : 2
> > Total c=C1 : 2 et non pas 1 !!
>
> Bizarre peut-être, mais conforme à XPath :) .
>
> > Le bon résultat est obtenu si l'on trafique l'affectation à la variable
> > comme suit :
> >
> > <xsl:variable name="cval" select="concat('',/a/b/c)"/>
> >
> > Dans ce cas d'école, le bon résultat est aussi obtenu si l'on écrit plutôt :
> >
> > <xsl:variable name="cval" select="/a/b[1]/c"/>
> >
> > mais si l'on doit déjà avoir une condition sur le noeud b, on ne pourra pas
> > utiliser cet artifice...
> >
> > S'agit-il d'un bug connu ????
> >
> > Comment je suis tombé sur ce problème ? En cherchant comment faire en XSL
> > pour savoir si les noeuds b ont tous un fils c ayant la même valeur !
> > Quelqu'un aurait-il une autre idée pour déterminer cela ?
>
> C'est un bon exercice ;=)
>
> Cordialement,
>
> Eric van der Vlist
>
> >
> > Merci de vos réponses
> >
> > Alain COUTHURES
> > LAFON SA - Equipements pétroliers
> >
> --
> See you at XTech in San Diego.
> http://conferences.oreillynet.com/cs/os2001/view/e_spkr/790
> ------------------------------------------------------------------------
> Eric van der Vlist http://xmlfr.org http://dyomedea.com
> http://xsltunit.org http://4xt.org http://examplotron.org
> ------------------------------------------------------------------------
> --
> 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=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|