2017-07-13 2 views
0

J'ai ci-dessous variable.Comment obtenir un nombre avec des chiffres uniques dans XSLT 1.0?

<xsl:variable name="number" select="56568"/> 

sortie nécessaire: 568

je dois obtenir une sortie qui ne contient que des chiffres uniques dans le nombre.

Une idée comment y parvenir dans XSLT 1.0?

Merci

+0

qui Processeur XSLT 1.0? Cela pourrait être plus facile si vous avez accès à certaines fonctions d'extension. –

+0

En XSLT 2.0, bien sûr, vous pouvez faire 'codepoints-to-string (valeurs-distinctes (string-to-codespoints ($ in)))' –

Répondre

0

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

+0

Merci pour votre réponse. –