2013-03-14 2 views
0

:XSLT 여러 그룹 형식의 데이터 테이블의 일부 열은 비어 있습니다 나는 다음과 같은 변경하는 방법 XSLT 1.0을 (를) 다음과 함께

<root> 
    <element id="1" Team="Rangers" Season="2011" Points="12" /> 
    <element id="2" Team="Rangers" Season="2012" Points="5" /> 
    <element id="3" Team="Rangers" Season="2012" Points="4" /> 
    <element id="4" Team="Rangers" Season="2013" Points="3" /> 
    <element id="5" Team="Astros" Season="2011" Points="12" /> 
    <element id="6" Team="Astros" Season="2013" Points="2" /> 
    <element id="7" Team="Astros" Season="2013" Points="1" /> 
    <element id="8" Team="Astros" Season="2013" Points="2" /> 
</root> 

속으로 :

<table> 
    <tr><td>Team</td> 
    <td>2011</td> 
    <td>2012</td> 
    <td>2013</td> 
    <td>Total</td></tr> 

    <tr><td>Rangers</td> 
    <td>12</td> 
    <td>9</td> 
    <td>3</td> 
    <td>20</td></tr> 

    <tr><td>Astros</td> 
    <td>12</td> 
    <td>0</td> 
    <td>5</td> 
    <td>14</td></tr> 
</table> 

내가 여기 비슷한 질문을하지만 놓쳤다 중요한 세부 사항. xslt Format data in a table some columns are blank 하위 그룹에도 요약되어 있습니다. 도움이 될 것입니다.

+0

전 새로운 질문으로 옮겨 가면 이미 답변 된 질문에 [답변 수락] (http://stackoverflow.com/faq#howtoask)을 기억하십시오. – JLRishe

+0

예제 출력에서 ​​합계를 이해할 수 없습니다. 왜 12 + 9 + 3 = 24 일 때 첫 번째 행 20이고, 12 + 0 + 5 = 14 일 때 두 번째 14가되는 이유는 무엇입니까? – JLRishe

답변

0

나는이 질문이 마지막 것과 다른 방법을 전혀 모르겠어요,하지만 그것을 수행해야합니다 샘플 입력에

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

    <xsl:key name="kTeam" match="element/@Team" use="."/> 
    <xsl:key name="kSeason" match="element/@Season" use="."/> 

    <xsl:variable name="distinctSeasons" 
       select="/root/element/@Season 
          [generate-id() = generate-id(key('kSeason', .)[1])]" /> 

    <xsl:template match="root"> 
    <table> 
     <tbody> 
     <tr> 
      <td>Team</td> 
      <xsl:apply-templates select="$distinctSeasons" mode="header"> 
      <xsl:sort select="." data-type="number" /> 
      </xsl:apply-templates> 
      <td>Total</td> 
     </tr> 

     <xsl:apply-templates 
      select="element/@Team[generate-id() = 
            generate-id(key('kTeam', .)[1])]" /> 
     </tbody> 
    </table> 
    </xsl:template> 

    <xsl:template match="@Team"> 
    <xsl:variable name="thisTeamRows" select="key('kTeam', .)/.." /> 

    <tr> 
     <td> 
     <xsl:value-of select="." /> 
     </td> 
     <xsl:apply-templates select="$distinctSeasons" mode="total"> 
     <xsl:sort select="." data-type="number" /> 
     <xsl:with-param name="teamRows" select="$thisTeamRows" /> 
     </xsl:apply-templates> 
     <td> 
     <xsl:value-of select="sum($thisTeamRows/@Points)" /> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="@Season" mode="header"> 
    <td> 
     <xsl:value-of select="." /> 
    </td> 
    </xsl:template> 

    <xsl:template match="@Season" mode="total"> 
    <xsl:param name="teamRows" /> 
    <td> 
     <xsl:value-of select="sum($teamRows[@Season = current()]/@Points)"/> 
    </td> 
    </xsl:template> 
</xsl:stylesheet> 

를 실행하면,이 생산 :

<table> 
    <tbody> 
    <tr> 
     <td>Team</td> 
     <td>2011</td> 
     <td>2012</td> 
     <td>2013</td> 
     <td>Total</td> 
    </tr> 
    <tr> 
     <td>Rangers</td> 
     <td>12</td> 
     <td>9</td> 
     <td>3</td> 
     <td>24</td> 
    </tr> 
    <tr> 
     <td>Astros</td> 
     <td>12</td> 
     <td>0</td> 
     <td>5</td> 
     <td>17</td> 
    </tr> 
    </tbody> 
</table>