Merci de votre réponse,
J'avais omis une contrainte : ne pas couper les chapitres. Je suis donc
arrivé à une solution proche de la votre. Permettant de repérer le chaiptre
contenant l'item median ...
Encore une fois merci
Nicolas
PS : J'ai mi longtemps à comprendre que le position() du
<xsl:apply-templates select="key('ITEMS', position() + $median )"/>
s'applique à l'ensemble des ITEM et non pas aux ITEM du CHAPITRE.
<xsl:key name="ITEMS" match="//ITEM" use="position()"/>
<xsl:variable name="ITEM_MEDIAN" select="key('ITEMS', floor(count(//ITEM)
div 2))"/>
<xsl:variable name="CHAPITRE_MEDIAN" select="//CHAPITRE[SECTION/ITEM =
$ITEM_MEDIAN]"/>
<xsl:template match="COURS">
...
<tr valign="top">
<!-- §COLONNE_GAUCHE§ -->
<td width="50%" class="pcColG">
<br/>
<xsl:apply-templates select="PLAN/CHAPITRE[ following-sibling::CHAPITRE =
$CHAPITRE_MEDIAN or self::CHAPITRE = $CHAPITRE_MEDIAN ]"/>
</td>
<!-- §COLONNE_DROITE§ -->
<td width="50%" class="pcColD">
<br/>
<xsl:apply-templates select="PLAN/CHAPITRE[ preceding-sibling::CHAPITRE =
$CHAPITRE_MEDIAN ]"/>
</td>
</tr>
...
</xsl:template>
> -----Message d'origine-----
> De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org] De la
> part de Eric van der Vlist
> Envoyé : mercredi 2 février 2005 18:59
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Re: Casse tete XSLT
>
> Le mercredi 02 février 2005 à 18:16 +0100, Nicolas BULTEAU a écrit :
> > Bonjour la liste,
> >
> > J'ai un document XML du type
> >
> > <CHAPITRE>
> > <TITRE>titre chapitre</TITRE>
> > <SECTION>
> > <TITRE>titre section</TITRE>
> > <ITEM>item1<ITEM>
> > <ITEM>item2<ITEM>
> > </SECTION>
> > </CHAPITRE>
> > <CHAPITRE>
> > <TITRE>titre chapitre</TITRE>
> > <SECTION>
> > <TITRE>titre section</TITRE>
> > <ITEM>item1<ITEM>
> > <ITEM>item2<ITEM>
> > </SECTION>
> > ...
> >
> >
> > Ma feuille de style XSLT doit permettre d'afficher mes chapitres dans 2
> > colonnes.
> > Et je voudrais repartir mes items sur les 2 colonnes de façon équitable
> et
> > la j'avoue que j'ai beaucoup de mal ...
>
> Vous ne vous intéressez qu'aux items, pas aux titres ni à la structure?
>
> > J'arrive à déterminer quel est l'item "median" avec qq chose du type :
> >
> > <xsl:key name="ITEMS" match="//ITEM" use="position()"/>
> > <xsl:variable name="ITEM_MEDIAN" select="key('ITEMS',
> floor(count(//ITEM)
> > div 2))"/>
> >
> > Mais je ne vois pas comment faire pour déterminer dans quelle colonne
> ecrire
> > mon chapitre ...
>
> La solution simple (si vous vous permettez d'utiliser une fonction
> extension) serait de faire la mise en forme sur une colonne dans une
> variable puis de couper le résultat en deux colonnes en utilisant une
> fonction de type exsl:node-set().
>
> A défaut, vous devriez pouvoir travailler directement sur la première
> moitié et pour chaque item, "sauter" vers son acolyte de la deuxième
> moitié.
>
> Par exemple :
>
> <?xml version="1.0" encoding="utf-8"?>
> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
> <xsl:output indent="yes"/>
> <xsl:key name="ITEMS" match="//ITEM" use="count(preceding::ITEM)
> +1"/>
>
> <xsl:variable name="median" select="ceiling(count(//ITEM) div 2)"/>
> <xsl:template match="/">
> <table>
> <xsl:apply-templates
> select="//ITEM[count(preceding::ITEM) < $median]"
> mode="ligne"/>
> </table>
> </xsl:template>
> <xsl:template match="ITEM" mode="ligne">
> <tr>
> <xsl:apply-templates select="."/>
> <xsl:apply-templates select="key('ITEMS', position()
+
> $median )"/>
> </tr>
> </xsl:template>
> <xsl:template match="ITEM">
> <td>
> <xsl:value-of select="."/>
> </td>
> </xsl:template>
> </xsl:transform>
>
>
> > Nicolas
> >
> >
> > --
> > 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)
> >
> >
> --
> Don't you think all these XML schema languages should work together?
> http://dsdl.org
> ------------------------------------------------------------------------
> Eric van der Vlist http://xmlfr.org http://dyomedea.com
> (ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
> (W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
> ------------------------------------------------------------------------
>
>
> --
> 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)
Received on Thu Feb 3 09:34:30 2005