2015-07-01 73 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個複雜度。 –