Frage

Ich habe Schwierigkeiten, einen Weg zu Gruppenelementen, um herauszufinden, XSLT 1.0. Ich habe eine Quelle xml ähnlich dem unten:

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

Ich möchte alle Projekte auswählen, sortieren und dann die Gruppe alle 3-Projekt in einem boundle wie im Beispiel unten:

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

Zur Zeit zu tun, damit einen boundle Tag zu öffnen, ich verwende und es später zu schließen. Können Sie etwas über jede bessere Lösung denken?

War es hilfreich?

Lösung

Keine Gruppierung erforderlich.

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

Andere Tipps

Ich kann den folgenden Link http://www.jenitennison.com/xslt/grouping/ , die mir geholfen, herauszufinden, wie man zu einer Gruppe verschiedene Anzahl von Elementen in einigen Kategorien, basiert auf dem Inhalt des XML-Dokuments.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top