2012-07-06 51 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))"/> 
相关问题