0
我需要使用XSLT在XML中对两个不同的元素进行分组。这里是示例XML: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>
我需要按月分组,然后classYear内。我需要按照monthName,classYear,然后是deathDate的一天部分进行排序。如果在课程年度只有一个死亡声明,我希望它在线显示,然后在同一个月的一个班级有多个公告时显示阻止。
这是我到目前为止。它按月份成功分组,但不按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) > 0'>
<xsl:copy-of select="link/a" />
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<br /><br />
</xsl:for-each>
</xsl:for-each>