2011-05-03 37 views
0

下面是它的输入,我想合并和排序元素而不使用xsl:sort !!如何在xsl中对属性进行排序

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE lists SYSTEM "number.dtd"> 
<numbers> 
    <number> 
    <num val="7"/> 
    <num val="2"/> 
    <num val="9"/> 
    <num val="16"/> 
    <num val="12"/> 
    <num val="15"/> 
    <number/> 
    <number> 
    <num val="29"/> 
    <num val="18"/> 
    <num val="30"/> 
    <num val="32"/> 
    </number> 
</numbers> 

的放出来应该是::

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE lists SYSTEM "number.dtd"> 
<numbers> 
    <number> 
    <num val="2"/> 
    <num val="7"/> 
    <num val="9"/> 
    <num val="12"/> 
    <num val="15"/> 
    <num val="16"/> 
    <num val="18"/> 
    <num val="29"/> 
    <num val="30"/> 
    <num val="32"/> 
    </number> 
</numbers> 
在xsl

,请不要使用xsl:排序...∩_∩

+0

@ZAWD:从哪里拿'9'?此外,目前还不清楚为什么你不想要一个标准的XSLT答案,使用这个指令... – 2011-05-03 23:42:24

+0

@Alejandro:是的,这是我的错误,我现在已经改变它了。Becouse我想找到一个新的方法来解决它。 – ZAWD 2011-05-03 23:46:59

+0

@ZAWD:如果你不想使用'xsl:sort',你必须实现一个排序算法。你想要什么排序算法?如果你不知道你应该先开始了解这一点。 – 2011-05-03 23:50:51

回答

1

不使用XSL:排序,你可以做如下的事情,但如果你的数字高得多,负数,非整数或不是实际数字,那么你将不得不调整的东西,或者它可能不工作(我试图从32到3200和xsltproc不仅要求我给出更高的-maxdepth值,而且花了52x长!):

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <numbers> 
     <number> 
     <xsl:call-template name="iterate.over.nums"> 
      <xsl:with-param name="i">0</xsl:with-param> 
     </xsl:call-template> 
     </number> 
    </numbers> 
    </xsl:template> 

    <xsl:template name="iterate.over.nums"> 
    <xsl:param name="i">0</xsl:param> 
    <xsl:choose> 
     <xsl:when test="not(numbers/number/num/@val &gt;= $i)" /> 
     <xsl:otherwise> 
     <xsl:for-each select="numbers/number/num[@val = $i]"> 
      <num val="{@val}"/> 
     </xsl:for-each> 
     <xsl:call-template name="iterate.over.nums"> 
      <xsl:with-param name="i" select="$i + 1" /> 
     </xsl:call-template> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 
相关问题