Bonjour,
> -----Original Message-----
> From: noon [mailto:jamin_a@epita.fr]
> Sent: samedi 12 avril 2003 17:23
> To: xml-tech@xmlfr.org
> Subject: [xml-tech] Re: String vers XML en XSL
>
> Merci beaucoup pour ta reponse.
> C'est vrai que ce n'est pas tres generique, surtout si je veux gerer
> une trentaine de mot clef different.
> Mais c'est deja une idée.
>
> Merci encore.
Voici une autre solution, si cela peut aider :
--- data.xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<data>
<message>
<user>user1</user>
<content>salut ca faisait longtemps :) comment ca va ??</content>
</message>
<message>
<user>user2</user>
<content>ca va pas du tout :( je me bat avec un XSL depuis 3 heures !!</content>
</message>
</data>
--- smileys.xsl
<?xml version="1.0" ?>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:str="http://exslt.org/strings"
xmlns:here="votre-namespace"
exclude-result-prefixes="msxsl str here"
version="1.0">
<here:smileys>
<here:smiley face="sad" image="sad.png"><![CDATA[:(]]></here:smiley>
<here:smiley face="happy" image="happy.png"><![CDATA[:)]]></here:smiley>
<here:smiley face="amazed" image="amazed.png"><![CDATA[:o]]></here:smiley>
<here:smiley face="laughing" image="laughing.png"><![CDATA[:D]]></here:smiley>
<here:smiley face="joking" image="joking.png"><![CDATA[:p]]></here:smiley>
</here:smileys>
<xsl:output method="html" version="4.0" />
<xsl:include href="str.tokenize.xsl" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="data">
<html>
<head><title>(Smileys ;-)</title></head>
<body>
<h1>(Smileys ;-)</h1>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="message">
<p><b><xsl:value-of select="user" /></b><br />
<xsl:apply-templates select="content" /></p>
</xsl:template>
<xsl:template match="content">
<xsl:call-template name="smiley-to-img">
<xsl:with-param name="text" select="text()" />
</xsl:call-template>
</xsl:template>
<xsl:template name="smiley-to-img">
<xsl:param name="text" />
<xsl:variable name="tokenized">
<xsl:call-template name="str:tokenize">
<xsl:with-param name="string" select="$text" />
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="msxsl:node-set($tokenized)/token">
<xsl:variable
name="smiley"
select="document('')/*/here:smileys/here:smiley[string(.) = string(current())]" />
<xsl:choose>
<xsl:when test="boolean($smiley)">
<img title="{$smiley/@face}" src="{$smiley/@image}" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="current()" /><xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:transform>
--- str.tokenize.xsl ( voir http://www.exslt.org/ )
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings">
<xsl:template name="str:tokenize">
<xsl:param name="string" select="''" />
<xsl:param name="delimiters" select="' 	
'" />
<xsl:choose>
<xsl:when test="not($string)" />
<xsl:when test="not($delimiters)">
<xsl:call-template name="str:_tokenize-characters">
<xsl:with-param name="string" select="$string" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="str:_tokenize-delimiters">
<xsl:with-param name="string" select="$string" />
<xsl:with-param name="delimiters" select="$delimiters" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="str:_tokenize-characters">
<xsl:param name="string" />
<xsl:if test="$string">
<token><xsl:value-of select="substring($string, 1, 1)" /></token>
<xsl:call-template name="str:_tokenize-characters">
<xsl:with-param name="string" select="substring($string, 2)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="str:_tokenize-delimiters">
<xsl:param name="string" />
<xsl:param name="delimiters" />
<xsl:variable name="delimiter" select="substring($delimiters, 1, 1)" />
<xsl:choose>
<xsl:when test="not($delimiter)">
<token><xsl:value-of select="$string" /></token>
</xsl:when>
<xsl:when test="contains($string, $delimiter)">
<xsl:if test="not(starts-with($string, $delimiter))">
<xsl:call-template name="str:_tokenize-delimiters">
<xsl:with-param name="string" select="substring-before($string, $delimiter)" />
<xsl:with-param name="delimiters" select="substring($delimiters, 2)" />
</xsl:call-template>
</xsl:if>
<xsl:call-template name="str:_tokenize-delimiters">
<xsl:with-param name="string" select="substring-after($string, $delimiter)" />
<xsl:with-param name="delimiters" select="$delimiters" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="str:_tokenize-delimiters">
<xsl:with-param name="string" select="$string" />
<xsl:with-param name="delimiters" select="substring($delimiters, 2)" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Ce qui nous donne :
--- result.htm
<html>
<head>
<title>(Smileys ;-)</title></head>
<body>
<h1>(Smileys ;-)</h1>
<p><b>user1</b><br>salut ca faisait longtemps <img title="happy" src="happy.png">comment ca va ?? </p>
<p><b>user2</b><br>ca va pas du tout <img title="sad" src="sad.png">je me bat avec un XSL depuis 3 heures !! </p>
</body>
</html>
Cordialement,
Cyril
--
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 Sat Apr 12 17:17:18 2003