Gruppierungs alle 3 Produkte in XSLT 1.0
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?
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() >= $pos and position() < ($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