2015-07-01 68 views
0

我一直在努力解决这个问题了几个小时....帮助XSLT 1.0组,而无需使用钥匙

首先,我必须使用XSLT 1.0,我不能使用xsl:关键。我不得不进行排序和分组下面的XML数据

<?xml version="1.0" encoding="UTF-8" ?> 
<?xml-stylesheet href="class2.xsl" type="text/xsl" ?> 
<université> 
    <étudiant> 
     <nom>Réjean Tremblay</nom> 
     <cours sigle="INF8430" note="89" /> 
     <cours sigle="INF1030" note="69" /> 
     <cours sigle="INF1230" note="75" /> 
    </étudiant> 
    <étudiant> 
     <nom>Martin Lambert</nom> 
     <cours sigle="INF8430" note="75" /> 
     <cours sigle="INF1030" note="72" /> 
     <cours sigle="INF1230" note="73" /> 
    </étudiant> 
    <étudiant> 
     <nom>Luc Alain</nom> 
     <cours sigle="INF9430" note="39" /> 
     <cours sigle="INF1030" note="89" /> 
     <cours sigle="INF1230" note="79" /> 
    </étudiant> 
    <étudiant> 
     <nom>Olive Saint-Amant</nom> 
     <cours sigle="INF8430" note="91" /> 
     <cours sigle="INF1230" note="99" /> 
    </étudiant> 
</université> 

预期的结果应该是

enter image description here

+2

“*我无法使用xsl:key。*“为什么? –

+0

我无法使用关键元素将课程分组http://www.w3schools.com/xsl/el_key.asp – user1082748

+1

您是否使用XT处理器?否则这个限制是荒谬的。 –

回答

2

没有XSL:关键(不是最佳的,当然)

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

    <xsl:template match="/*"> 
     <table> 
      <tr> 
       <td>Sigle</td> 
       <td>Nombre d'etuidants</td> 
       <td>Moyenne du cours</td> 
      </tr> 
      <xsl:apply-templates select="etudiant/cours"/> 
     </table> 
    </xsl:template> 

    <xsl:template match="cours[not(@sigle = preceding::cours/@sigle)]"> 
     <tr> 
      <td> 
       <xsl:value-of select="@sigle"/> 
      </td> 
      <xsl:variable name="cnt" select="count(//cours[@sigle = current()/@sigle])"/> 
      <td> 
       <xsl:value-of select="$cnt"/> 
      </td> 
      <td> 
       <xsl:value-of select="format-number(sum(//cours[@sigle = current()/@sigle]/@note) div $cnt, '#.0')"/> 
      </td> 
     </tr> 
    </xsl:template> 
</xsl:stylesheet> 
+0

谢谢鲁道夫!这工作。我永远不会有这样的。我当然如此。 – user1082748

+0

这很简单 - 我们的模板只匹配那些没有相同标识符的课程。这不是最优的,因为这个检查是针对每门课程进行的,即我们有n^2个复杂度。 –