如何在xslt中对值进行排序?

时间:2017-04-12 06:35:40

标签: xml xslt xslt-1.0 xslt-2.0

您好,请告诉我如何在xslt中对值进行排序?

这是我的代码 http://xsltransform.net/bEzjRJq/1

XML

    <livescore gn="192.168.24.87">
        <calendar potime="715">
          <test matchstatus="Match Ended" name="ccc" matchnumber="Match 1"/>
            <test matchstatus="adsds" name="bb" matchnumber="Match 2"/>
            <test matchstatus="Match Ended" name="aaa" matchnumber="Match 4"/>
            <test matchstatus="Match Ended" name="bbb" matchnumber="Match 3"/>
        </calendar>
    </livescore>

 <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
        <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

        <xsl:template match="/">
          <hmtl>
            <head>
              <title>New Version!</title>
            </head>
            <xsl:apply-templates select="livescore/calendar/test[@matchstatus ='Match Ended']"/>
          </hmtl>
        </xsl:template>
    <xsl:template match="livescore/calendar/test[@matchstatus ='Match Ended']" >

    <h1><xsl:value-of select="@name"/></h1>
        </xsl:template>
    </xsl:transform>

输出

<h1>ccc</h1>
   <h1>aaa</h1>
   <h1>bbb</h1>

预期输出

<h1>aaa</h1>
       <h1>bbb</h1>
       <h1>ccc</h1>

我试过这一行

<xsl:sort select="normalize-space(substring-after(matchnumber,' '))" data-type="number" order="descending"/>

但没有工作

2 个答案:

答案 0 :(得分:2)

AFAICT,您只需将遗失的@添加到您的尝试中即可:

<xsl:sort select="normalize-space(substring-after(@matchnumber,' '))" data-type="number" order="descending"/>

演示:http://xsltransform.net/bEzjRJq/2

答案 1 :(得分:-2)

<xsl:sort select="//@matchnumber"/>