Re: Additionner des colonnes

Stephane Bonhomme <[email protected]> Tue, 09 Sep 2008 10:15:33 +0200
Newsgroups gmane.text.xml.french.tech
Organization Exselt Services
Message-ID <1220948133.24214.77.camel@citrouille>
Bonjour

L'id=C3=A9e de la solution que je propose est d'avoir un template parcour=
ant
les =C3=A9l=C3=A9ments colspec en cumulant les largeurs au fur et a mesur=
e, la
largeur cumul=C3=A9e est pass=C3=A9e par le parametre w.=20
Pour dissocier ce traitement de process normal de traitement du tableau
j'utilise le mode getwidth. Le template est appliqu=C3=A9 au premier =C3=A9=
lement
colspec, et se rappelle lui-meme sur le premier element frere colspec
suivant. s'il n'y a pas de suivant, le template sort la valeur de la
largeur cumul=C3=A9e.


<?xml version=3D"1.0" encoding=3D"utf-8"?>

<xsl:stylesheet version=3D"1.0"
xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform">

<xsl:template match=3D"table">
  <xsl:variable name=3D"width">
    <xsl:apply-templates select=3D"tgroup/colspec[1]" mode=3D"getwidth"/>
  </xsl:variable>
  table width : <xsl:value-of select=3D"$width"/>
</xsl:template>

<xsl:template match=3D"colspec" mode=3D"getwidth">
  <xsl:param name=3D"w" select=3D"0"/>
  <xsl:variable name=3D"cw" select=3D"$w+substring-before(@colwidth,'mm')=
"/>
  <xsl:choose>
    <xsl:when test=3D"following-sibling::colspec">
      <xsl:apply-templates select=3D"following-sibling::colspec[1]"
mode=3D"getwidth">
	<xsl:with-param name=3D"w" select=3D"$cw"/>
      </xsl:apply-templates>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select=3D"$cw"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

Cordialement,

St=C3=A9phane.


Le mardi 09 septembre 2008 =C3=A0 09:28 +0200, Carine Chaulacel a =C3=A9c=
rit :
> Bonjour,
>=20
>=20
> J'ai des
> tableaux du type :
>=20
>=20
>=20
>=20
>=20
>          <table
> tocentry=3D"1">
>=20
>           =20
> <title>Table Title</title>
>=20
>             <tgroup
> align=3D"left" cols=3D"5" colsep=3D"1"
> rowsep=3D"0">
>=20
>                <colspec
> colnum=3D"1" colname=3D"1" colwidth=3D"20mm" />
>=20
>                <colspec
> colnum=3D"2" colname=3D"2" colwidth=3D"30mm" />
>=20
>                <colspec
> colnum=3D"3" colname=3D"3" colwidth=3D"40mm" />
>=20
>                <colspec
> colnum=3D"4" colname=3D"4" colwidth=3D"50mm" />
>=20
>                <colspec
> colnum=3D"5" colname=3D"5" colwidth=3D"25mm" />
>=20
>                <thead
> valign=3D"bottom">
>=20
>                 =20
> <row rowsep=3D"1">
>=20
>                    =20
> <entry colname=3D"1" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para>Col 1</para>
>=20
>                    =20
> </entry>
>=20
>                    =20
> <entry colname=3D"2" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para>Col 2</para>
>=20
>                    =20
> </entry>
>=20
>                    =20
> <entry colname=3D"3" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para>Col 3</para>
>=20
>                    =20
> </entry>
>=20
>                    =20
> <entry colname=3D"4" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para>Col
> 4</para>
>=20
>                      </entry>
>=20
>                    =20
> <entry colname=3D"5" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para>Col 5</para>
>=20
>                    =20
> </entry>
>=20
>                 =20
> </row>
>=20
>              =20
> </thead>
>=20
>                <tbody
> valign=3D"top">
>=20
>                 =20
> <row rowsep=3D"0">
>=20
>                    =20
> <entry colname=3D"1" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para></para>
>=20
>                    =20
> </entry>
>=20
>                    =20
> <entry colname=3D"2" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para></para>
>=20
>                    =20
> <entry colname=3D"3" morerows=3D"0"
> valign=3D"top">
>=20
>                         <para></para>
>=20
>                    =20
> </entry>
>=20
>                    =20
> <entry colname=3D"4" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para></para>
>=20
>                    =20
> <entry colname=3D"5" morerows=3D"0"
> valign=3D"top">
>=20
>                       =20
> <para></para>
>=20
>                    =20
> </entry>
>=20
>                 =20
> </row>
>=20
>              =20
> </tbody>
>=20
>             </tgroup>
>=20
>          </table>
>=20
>=20
>=20
> Et je voudrais calculer la largeur totale de mon tableau en
> additionnant la largeur des colonnes (qui est spcifie par @colwidth dan=
s les lments
> colspec). Il me faut une rgle gnrale qui s'applique  tous mes tableaux =
qui
> n'ont bien sur pas toujours le mme nombre de colonnes.
>=20
> La fonction sum() ne marche pas  cause des "mm"
> dans les valeurs. Si je tronque mes valeurs et que je les mets dans une
> variable, sum($variable) ne marche pas non plus, ma variable n'tant pas=
 un nud.Le but au final est d'adapter la taille et l'orientation de mes p=
ages en fonction de la taille du tableau (basculer en A4 paysage s'il fai=
t plus de 210mm par exemple)
>=20
>=20
> Si quelqu'un a dj eu  rsoudre un problme similaire,
> toutes les pistes seront les bienvenues.Merci
>=20
>=20
>=20
>=20
> _________________________________________________________________
> Installez gratuitement les 20 mticones Windows Live Messenger les plus =
fous ! Cliquez ici !
> http://www.emoticones-messenger.fr/
>=20
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>=20
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>=20
> Cette liste est a votre disposition pour discuter en francais de=20
> tout sujet technique lie a XML.
>=20
> Pour resilier votre abonnement, envoyez un message contenant=20
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=3Dunsubscribe)
>=20
--=20
           St=C3=A9phane Bonhomme           --           Exselt Services
       =20
        Formations, Conseil et R=C3=A9alisations en Ing=C3=A9nierie Docum=
entaire,
                    Technologies Web et Logiciels Libres=20
             [email protected]   -   http://www.exselt.com
                04 57 39 30 78        /      06 88 57 27 08