XSLT按字母和数字排序问题

Bry*_*yan 7 sorting xslt alphanumeric

我有一组字符串,即g:lines ='9,1,306,LUCY,G,38,12'

我需要输出在XSLT 1.0中:

1,9,12,38,306,G,LUCY

这是我目前的代码:

<xsl:for-each select="$all_alerts[g:problem!='normal_service'][g:service='bus']">
  <xsl:sort select="g:line"/>
  <xsl:sort select="number(g:line)" data-type="number"/>
  <xsl:value-of select="normalize-space(g:line)" /><xsl:text/>
  <xsl:if test="position()!=last()"><xsl:text>,&#160;</xsl:text></xsl:if>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

我可以让它只显示'1,12,306,38,9,G,LUCY',因为第二种类型没有被提取.

有人能帮帮我吗?

Tim*_*m C 12

要使用一个xsl:foreach语句实现此目的,请尝试以下操作:

<xsl:for-each select="$all_alerts[g:problem!='normal_service'][g:service='bus']"> 
  <xsl:sort select="not(number(g:line))"/> 
  <xsl:sort select="number(g:line)" data-type="number"/> 
  <xsl:sort select="g:line"/> 
  <xsl:value-of select="normalize-space(g:line)" /><xsl:text/> 
  <xsl:if test="position()!=last()"><xsl:text>,&#160;</xsl:text></xsl:if> 
</xsl:for-each> 
Run Code Online (Sandbox Code Playgroud)

第一个xsl:sort对行是否为数字进行排序.在不()如果该行是一个数字,而真正的如果不是返回false.false在true之前排序,因此数字首先出现.如果省略此类,则首先显示字母.

下一个xsl:sort以数字方式排序,因此会正确排序数字,但不会影响字母(当应用number()时,它们都会返回NaN).

最终的xsl:sort将按字母顺序对字母进行排序.