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