Подтвердить что ты не робот

Как использовать для каждой группы в XSL

im все еще учится for-each-group Каков наилучший способ группировки чего-то подобного с помощью XSL? (по странам) Я пытаюсь использовать XSL для преобразования этого XML в другой XML.

<?xml version="1.0" encoding="UTF-8"?>
<Person>
    <Student>
        <Info Country="England" Name="Dan" Age="20" Class="C" />
    </Student>
    <Student>
        <Info Country="England" Name="Dan" Age="20" Class="B" />

    </Student>
    <Student>
        <Info Country="England" Name="Sam" Age="20" Class="A" />
    </Student>

    <Student>
       <Info Country="Australia" Name="David" Age="22" Class="D" />
    </Student>
    <Student>
        <Info Country="Australia" Name="David" Age="22" Class="A" />
    </Student>

</Person>
4b9b3361

Ответ 1

Если вы группируете по странам, вы начинаете, например,

<xsl:template match="Person">
  <xsl:for-each-group select="Student/Info" group-by="@Country">
    <country name="{current-grouping-key()}">

    </country>
  </xsl:for-each-group>
</xsl:template>

Затем вам нужно решить, хотите ли вы далее группировать элементы Info в каждой группе стран, например, по имени:

<xsl:template match="Person">
  <xsl:for-each-group select="Student/Info" group-by="@Country">
    <country name="{current-grouping-key()}">
      <xsl:for-each-group select="current-group()" group-by="@Name">
        <student name="{current-grouping-key()}">
          <classes>
            <xsl:for-each select="current-group()">
              <class><xsl:value-of select="@Class"/></class>
            </xsl:for-each>
          </classes>
        </student>
      </xsl:for-each-group>
    </country>
  </xsl:for-each-group>
</xsl:template>