Re: [XSLT] Déterminer si un caractère est Latin ou pas

Stephane Bortzmeyer <[email protected]> Mon, 24 Mar 2008 16:03:47 +0100
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
On Fri, Mar 21, 2008 at 03:03:47PM +0100,
 Stephane Bortzmeyer <[email protected]> wrote 
 a message of 22 lines which said:

> Pour traduire du XML vers un format qui n'utilise pas Unicode,
> j'aurais besoin de tester, dans un programme XSLT :
> 
> - si un caractère donné est un caractère latin
> - si un caractère donné appartient à l'ensemble qu'on trouve dans
>   Latin-1

Bon, avec l'aide rapide et efficace de Stéphane Bonhomme et d'Eric van
der Vlist, voici la solution la plus proche de mon cahier des charges
originel. Elle nécessite EXSLT (car je n'ai pas trouvé d'autre moyen
de parcourir tous les caractères d'une chaîne) donc je dois laisser
tomber Sablotron.

  <xsl:variable name="goodletters">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZàâèéêëîïôùûüÿÀÂÈÉÊËÎÏÔÙÛÜ;:./%' &#10;&#13;</xsl:variable>

  <xsl:template match="text()">
    <xsl:variable name="content">
      <xsl:value-of select='.'/>
    </xsl:variable>
    <xsl:for-each select="str:tokenize($content, '')">
      <xsl:choose>
        <xsl:when test="string-length(translate(text(), $goodletters, '')) != 0">[Unicode character omitted]</xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="."/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
  </xsl:template>

Principal manque : j'aimerai bien afficher le point de code Unicode au
lieu d'un message générique mais je ne vois pas comment le trouver en
XSLT 1 ?