2009-04-15 12 views
1

Comment ferais-je "substring (variable, 1,1) entre a-z ou A-Z" alors faire X else faire Y en utilisant XSLT? Je sais qu'une option serait d'utiliser regex mais je m'attendrais à ce qu'il y ait quelque chose qui ne soit pas tellement exagéré.Question de chaîne XSLT très simple

+0

Hmmh. Pourquoi regex serait-il trop? XSLT lui-même est assez lourd que je pense qu'il n'y a pas besoin d'être préoccupé par l'utilisation de RE. De bons processeurs devraient les pré-compiler quand même, si possible. – StaxMan

+0

Est-ce que je suis correctement que vous voulez vous assurer que le premier caractère d'une variable chaîne est une lettre majuscule ou minuscule? – el2iot2

Répondre

3

Une solution simple XSLT 1.0:

Cette transformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="vLetters" 
    select="'ABCDEFGHIKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/> 

    <xsl:variable name="vText" select="'1Text'"/> 

    <xsl:template match="/"> 
     <xsl:choose> 
     <xsl:when test= 
      "contains($vLetters, substring($vText,1,1))"> 
      Letter 
     </xsl:when> 
     <xsl:otherwise> 
      Not Letter 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur tout document XML (non utilisé), produit le résultat recherché:

 Not Letter 

Selon le cas, on peut ajouter le traitement est nécessaire à chacune des deux "clauses" (<xsl:when> et <xsl:otherwise>) de l'instruction <xsl:choose>.

1

Et pour XSLT 2.0, vous pouvez utiliser la fonction d'expression régulière matches:

<xsl:choose> 
    <xsl:when test="matches($variable1, '^[a-zA-Z].*$')"> 
    Match 
    </xsl:when> 
    <xsl:otherwise> 
    NoMatch 
</xsl:otherwise> 
</xsl:choose> 
+0

XSLT 2.0 a, entre autres inconvénients, l'inconvénient que je ne peux pas faire des tests de transformation rapides et sales dans n'importe quel navigateur que je veux. – Brian

+0

D'accord. J'ai tendance à utiliser XSLT 1.0 pour la même raison. – el2iot2