2012-04-10 11 views
0

XSLTを使用してXML内の2つの異なる要素でグループ化する必要があります。ここにサンプルXMLがあります:複数のグループby XSLT

<root> 
<name>Joe</name> 
<classYear>1996</classYear> 
<deathDate>September 10, 2010</deathDate> 
<monthName>September 2010</deathDate> 
<moreInfo></moreInfo> 
<link><a href="http://somelink.com">Details available here.</a></link> 
</root> 
<root> 
<name>Sam</name> 
<classYear>1981</classYear> 
<deathDate>January 1, 2003</deathDate> 
<monthName>January 2003</deathDate> 
<moreInfo>He played on the baseball team.</moreInfo> 
<link><a href="http://anotherlink.com">Details available here.</a></link> 
</root> 

私はmonthNameでグループ化し、その中にclassYearを入れる必要があります。私はmonthName、classYear、そしてdeathDateの日の順にソートする必要があります。学年の卒業発表が1つしかない場合は、同じ月に1つの学年の発表が複数ある場合は、インラインで表示してブロックを表示します。

これまで私がこれまで持っていたことは次のとおりです。クラス名はmonthNameで正常にグループ化されますが、classYearではグループ化されません。

<xsl:variable name="vMonthNamesCaps" select="'|JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER'"/> 
<xsl:for-each select="//monthName[not(. = following::monthName)]"> 
    <xsl:sort select="string-length(substring-before($vMonthNamesCaps,substring-before(.,' ')))" data-type="number" order="ascending" /> 
    <H2><xsl:value-of select="."/></H2> 
    <xsl:for-each select="//root[monthName=current()]"> 
    <xsl:sort select="classYear"/> 
    <xsl:sort select="substring-after(substring-before(deathDate,', '),' ')" data-type="number" order="ascending" /> 
    <strong>Class of <xsl:value-of select="classYear"/>: </strong><span class="name"><xsl:value-of select="name"/></span> died on <xsl:value-of select="deathDate"/>. <xsl:value-of select="moreInfo"/> 
    <xsl:choose> 
     <xsl:when test='count(link/a) &gt; 0'> 
     <xsl:copy-of select="link/a" /> 
     </xsl:when> 
     <xsl:otherwise></xsl:otherwise> 
    </xsl:choose> 
    <br /><br /> 

    </xsl:for-each> 
</xsl:for-each> 

答えて

0

あなたは、1つ以上の「GROUPBY」カーソルを持っている簡単な方法としてxsl:keyをチェックしたいと思います。