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)
>
>
>