Je ne pense pas qu'il y ait un moyen facile de le faire - à moins que votre processeur prend en charge certaines fonctions d'extension. Sans cela, vous devez utiliser un modèle récursif nommé:
<xsl:template name="distinct-characters">
<xsl:param name="input"/>
<xsl:param name="output"/>
<xsl:choose>
<xsl:when test="not($input)">
<xsl:value-of select="$output"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="char" select="substring($input, 1, 1)" />
<!-- recursive call -->
<xsl:call-template name="distinct-characters">
<xsl:with-param name="input" select="substring($input, 2)"/>
<xsl:with-param name="output">
<xsl:value-of select="$output"/>
<xsl:if test="not(contains($output, $char))">
<xsl:value-of select="$char"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Exemple d'appel:
<output>
<xsl:call-template name="distinct-characters">
<xsl:with-param name="input" select="56568"/>
</xsl:call-template>
</output>
Résultat:
<output>568</output>
Démo: http://xsltransform.net/a9Gix1
qui Processeur XSLT 1.0? Cela pourrait être plus facile si vous avez accès à certaines fonctions d'extension. –
En XSLT 2.0, bien sûr, vous pouvez faire 'codepoints-to-string (valeurs-distinctes (string-to-codespoints ($ in)))' –