2011-11-15 44 views
9

Tôi chỉ muốn lấy phần tử cuối cùng từ một chuỗi giống như "aaa-bbb-ccc-ddd" này trong xslt.Chọn một từ cuối cùng từ một chuỗi trong xslt

Đặt ra phải là "ddd" không phản hồi của '-'s.

+1

Tìm kiếm "XSLT chuỗi phân chia" –

+0

Hey ... tôi đã sử dụng chức năng tokenize và nó đã hoạt động. Cảm ơn bạn rất nhiều ... – Satoshi

+0

@Satoshi, plz chấp nhận câu trả lời nếu nó hữu ích. –

Trả lời

12

XSLT/XPath 2.0 - bằng cách sử dụng tokenize() chức năng để phân chia các chuỗi trên "-" và sau đó sử dụng một bộ lọc ngữ để chọn mục cuối cùng trong chuỗi:

<?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 - sử dụng a recursive template để tìm kiếm sự xuất hiện cuối cùng của "-" và chọn chuỗi con sau nó:

<?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> 
Các vấn đề liên quan