Группировка каждые 3 элемента в xslt 1.0 - PullRequest
2 голосов
/ 08 марта 2010

У меня проблемы с поиском способа группировки предметов xslt 1.0. У меня есть исходный XML, похожий на приведенный ниже:

<client name="client A">
    <project name = "project A1"/>
    <project name = "project A2"/>
    <project name = "project A3"/>
    <project name = "project A4"/>
</client>
<client name="client B">
    <project name = "project B1"/>
    <project name = "project B2"/>
</client>
<client name="client C">
    <project name = "project C1"/>
    <project name = "project C2"/>
    <project name = "project C3"/>
</client>

Я бы хотел выбрать все проекты, отсортировать их, а затем сгруппировать каждые 3 проекта в один слот, как показано в примере ниже:

<boundle>
  <project name="project A1">
  <project name="project A2">
  <project name="project A3">
</boundle>
<boundle>
  <project name="project A4">
  <project name="project B1">
  <project name="project B2">
</boundle>
<boundle>
  <project name="project C1">
  <project name="project C2">
  <project name="project C3">
</boundle>

В настоящее время для этого я использую открывающий тег и закрываю его позже. Можете ли вы придумать какое-нибудь лучшее решение?

Ответы [ 2 ]

4 голосов
/ 08 марта 2010

Группировка не требуется.

<xsl:param name="perGroup" select="3" />

<xsl:variable name="allProjects" select="/client/project" />

<xsl:template match="/">
  <xsl:apply-templates select="$allProjects" mode="counted" />
</xsl:template>

<xsl:template match="project" mode="counted">
  <xsl:if test="position() mod $perGroup = 1">
    <xsl:variable name="pos" select="position()" />
    <boundle>
      <xsl:copy-of select="$allProjects[
        position() &gt;= $pos and position() &lt; ($pos + $perGroup)
      ]" />
    </boundle>
  </xsl:template>
</xsl:template>
0 голосов
/ 19 февраля 2012

Я могу порекомендовать следующую ссылку http://www.jenitennison.com/xslt/grouping/, которая помогла мне понять, как сгруппировать различное количество элементов в некоторые категории на основе содержимого в документе XML.

...