0

XSLTを使用して、XML内の2つの異なる要素でグループ化する必要があります。サンプルXMLは次のとおりです。

<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>
4

1 に答える 1

0

xsl:key1 つまたは複数の "groupBy" カーソルを持つ簡単な方法として確認する必要があります。

于 2012-04-10T14:41:03.400 に答える