2011-11-15 91 views
9

我只想從xslt中的這個「aaa-bbb-ccc-ddd」字符串取出最後一個元素。從xslt中的字符串中選擇最後一個字

輸出應該是「ddd」而不考慮' - '。

+1

搜索「XSLT字符串分割」 –

+0

嘿...我使用了tokenize函數,它工作了。非常感謝你... – Satoshi

+0

@Satoshi,plz接受答案,如果它有幫助。 –

回答

12

XSLT/Xpath的2.0 - 利用tokenize()功能分割的字符串 「 - 」,然後使用謂詞過濾器來選擇所述序列中的最後一個項目:

<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:value-of select="tokenize('aaa-bbb-ccc-ddd','-')[last()]"/> 
    </xsl:template> 
</xsl:stylesheet> 

XSLT/XPath的1.0 - 使用a recursive template尋找最後一次出現「 - 」,並選擇以下子吧:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:call-template name="substring-after-last"> 
      <xsl:with-param name="input" select="'aaa-bbb-ccc-ddd'" /> 
      <xsl:with-param name="marker" select="'-'" /> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="substring-after-last"> 
     <xsl:param name="input" /> 
     <xsl:param name="marker" /> 
     <xsl:choose> 
      <xsl:when test="contains($input,$marker)"> 
       <xsl:call-template name="substring-after-last"> 
        <xsl:with-param name="input" 
      select="substring-after($input,$marker)" /> 
        <xsl:with-param name="marker" select="$marker" /> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="$input" /> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
相關問題