2012-07-06 27 views
1

我很新的XSLT,並想知道如何做基於衍生變量排序如下所示(使用XSLT 1.0):XSLT如何通過從原始字段派生的變量進行排序?

XML:

<channel> 
    <item> 
    <title>#2: Second Guy</title> 
    </item> 
    <item> 
    <title>#3: Third Guy</title> 
    </item> 
    <item> 
    <title>#1: First Guy</title> 
    </item> 
</channel> 

XSLT嘗試:

<xsl:for-each select="channel/item" > 

     <xsl:sort select="$rank" data-type="number" order="ascending" /> 

     <xsl:variable name="rankStartPosn" select="string-length(substring-before(title, '#'))+1"/> 
     <xsl:variable name="rankEndPosn" select="string-length(substring-before(title, ':'))+1"/> 
     <xsl:variable name="rank" select="substring(title,number($rankStartPosn), number($rankEndPosn)-number($rankStartPosn))"/> 

       <p class="Normal"> 
        <xsl:value-of select="title" /> 
       </p> 
      </xsl:if> 
     </xsl:if> 
    </xsl:for-each> 

希望的輸出:

#1: First Guy 
#2: Second Guy 
#3: Third Guy 

感謝ADVAN任何幫助! 乍得

回答

0

簡單

<xsl:sort select="substring(substring-before(title, ':'), 2)" 
      data-type="number" order="ascending" /> 
+0

輝煌!謝謝@Dimitre Novatchev。 – 2012-07-07 16:25:05

+0

@ChadRichardson:不客氣。 – 2012-07-07 17:27:18

0

啊......頓悟!

只是不使用變量,並把整個表達式排序的選擇......像:

<xsl:sort data-type="number" order="ascending" 
      select="substring(title,number(string-length(substring-before(title, '#'))+2), number(string-length(substring-before(title, ':'))+1)-number(string-length(substring-before(title, '#'))+2))"/> 
相關問題