代码之家  ›  专栏  ›  技术社区  ›  Brian

非常简单的XSLT字符串问题

  •  1
  • Brian  · 技术社区  · 15 年前

    我该如何在a-z或a-z之间执行“substring(variable,1,1)”,然后x使用xslt执行y操作?我知道有一个选择是使用regex,但我希望会有一些不太过分的东西。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Dimitre Novatchev    15 年前

    一个简单的XSLT1.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:when> <xsl:otherwise> <xsl:choose> 指令。

        2
  •  1
  •   el2iot2    15 年前

    对于XSLT2.0,可以使用正则表达式函数 matches :

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