Voici la réponse que m'avait envoyé Eric Van Der Clist pour mon problème qui
etait similaire au tien :
Je me demande si cela ne fait pas partie des choses qui sont plus faciles à
faire qu'à expliquer :-) ...
La transformation suivante (à adapter) implémente cela :
++++++++++++++++++++++++++++++++++++++++++++
<?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:param name="lMaxParDefaut">65</xsl:param>
<xsl:template match="/">
<res>
<xsl:apply-templates select="/*/texte/node()[1]" mode="tronque"/>
</res>
</xsl:template>
<xsl:template match="text()" mode="tronque">
<xsl:param name="lMax" select="$lMaxParDefaut"/>
<xsl:param name="l" select="0"/>
<xsl:choose>
<xsl:when test="$l + string-length(.) < $lMax">
<xsl:copy/>
<xsl:apply-templates
select="following-sibling::node()[1]" mode="tronque">
<xsl:with-param name="lMax" select="$lMax"/>
<xsl:with-param name="l" select="$l +
string-length(.)"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring(., 1, $lMax -$l )"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="tronque">
<xsl:param name="lMax" select="$lMaxParDefaut"/>
<xsl:param name="l" select="0"/>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()[1]" mode="tronque">
<xsl:with-param name="lMax" select="$lMax"/>
<xsl:with-param name="l" select="$l"/>
</xsl:apply-templates>
</xsl:copy>
<xsl:if test="$l + string-length(.) < $lMax">
<xsl:apply-templates select="following-sibling::node()[1]"
mode="tronque">
<xsl:with-param name="lMax" select="$lMax"/>
<xsl:with-param name="l" select="$l +
string-length(.)"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
</xsl:transform>
++++++++++++++++++++++++++++++++++++++++++++
Elle se base sur les caractères physiquement présents (deux espaces
consécutifs comptent pour deux caractères) et non sur la taille "affichée"
(ce qui la compliquerait pas mal).
Christophe Rousée
Analyste - Programmeur
CONEX
Tél : +33 (0) 3.20.17.13.77
http://www.conex.fr/
-----Message d'origine-----
De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org] De la part
de Stephane Bortzmeyer
Envoyé : mardi 12 juillet 2005 11:38
À : xml-tech@xmlfr.org
Objet : [xml-tech] [XSLT] S'arrêter aux N premiers caractères ?
J'ai un problème de publication de fichiers XML sur le Web. Je souhaiterai
me limiter aux N premiers caractères (et ajouter un lien du genre "Voir la
suite...").
On pense évidemment à la fonction substring de Xpath
(http://www.w3.org/TR/xpath#section-String-Functions) appliquée au texte de
l'élément mais il y a un mais : j'ai du contenu mixte, texte et élements
(comme en HTML).
Une idée géniale ?
--
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)
Ce mail a fait l'objet d'un controle antivirus avec la technologie Sophos.
--
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 Tue Jul 12 15:28:53 2005