2009-04-15 40 views
1

我該如何做「a-z或A-Z之間的子串(變量,1,1)」,然後使用XSLT做X X else?我知道一個選項會使用正則表達式,但我希望那裏有些東西不是太過於誇張。非常簡單的XSLT字符串問題

+0

Hmmh。爲什麼正則表達式會是一個矯枉過正的問題? XSLT本身的重量足夠大,我認爲不需要關心使用RE。 好的處理器應該儘可能地預編譯它們。 – StaxMan 2009-04-15 20:44:58

+0

我遵循正確的說法,希望確保字符串變量的第一個字符是大寫還是小寫字母? – el2iot2 2009-04-15 21:06:07

回答

3

一個簡單的XSLT 1.0溶液

這種變換:

<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> 

當在任何XML文檔(未使用)施加, 產生想要的結果

 Not Letter 

根據具體情況,可以添加任何處理對於<xsl:choose>指令的兩個「子句」(<xsl:when><xsl:otherwise>)中的每一個都是必需的。

1

而對於XSLT 2.0,您可以使用正則表達式功能matches

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