Re: Reconstitution de listes chainÃ(c)es avec Xslt

COUTHURES Alain <[email protected]> Thu, 05 Apr 2007 12:57:30 +0200
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
Ca y est ! J'ai compris ce que tu voulais dire par "liste chaînée" !

Voilà mon autre proposition :

    <xsl:stylesheet version="1.0" txs:name="regroupe">
        <xsl:template match="/">
            <root>
                <xsl:apply-templates/>
            </root>
        </xsl:template>
        <xsl:template match="A">
            <xsl:variable name="b" select="B"/>
            <xsl:if test="count(preceding-sibling::A[C=$b])=0">
                <A>
                    <xsl:call-template name="liste">
                        <xsl:with-param name="v" select="B"/>
                    </xsl:call-template>
                </A>
            </xsl:if>
        </xsl:template>
        <xsl:template name="liste">
            <xsl:param name="v"/>
            <xsl:for-each select="/root/A[B=$v]">
                <B><xsl:value-of select="$v"/></B>
                <C><xsl:value-of select="C"/></C>
                <xsl:if test="C!=$v">
                    <xsl:call-template name="liste">
                        <xsl:with-param name="v" select="C"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>

(testé avec TXS (http://sourceforge.net/projects/txs))

Bien cordialement,

Alain COUTHURES
<agenceXML>
http://www.agencexml.com



Laurent MOULIS a écrit :
> Bonjour Alain,
> Je te remercie, pour cette première réponse rapide mais
> il se trouve que mes listes peuvent aussi être de la forme :
>
> <root>
> <A><B>10</B><C>10</C></A>
> <A><B>10</B><C>10</C></A>
> <A><B>11</B><C>11</C></A>
> <A><B>11</B><C>11</C></A>
> <A><B>11</B><C>11</C></A>
> <A><B>11</B><C>12</C></A>
> <A><B>12</B><C>12</C></A>
> <A><B>12</B><C>13</C></A>
> <A><B>13</B><C>13</C></A>
> <A><B>14</B><C>14</C></A>
> </root>
>
> et dans ce cas là, le résultat attendu est :
>
> <root>
> <A>
>      <B>10</B><C>10</C>
>      <B>10</B><C>10</C>
> </A>
> <A>
>      <B>11</B><C>11</C>
>      <B>11</B><C>11</C>
>      <B>11</B><C>11</C>
>      <B>11</B><C>12</C>
>      <B>12</B><C>12</C>
>      <B>12</B><C>13</C>
>      <B>13</B><C>13</C>
> </A>
> <A>
>      <B>14</B><C>14</C>
> </A>
> </root>
>
> Avec cette contrainte, l'actuce "substring" ne fonctionne plus.
> tout du moins sous la forme que tu me proposes.
>
> Mais je sens que je la solution est proche.
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (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 [email protected]
> (mailto:[email protected]?Subject=unsubscribe)
>
>
>