Hallo Forum-Nutzer,
seit einiger Zeit schlage ich mich mit einem Problem rum, welches ich einfach nicht lösen kann - zwar hatte ich zahlreiche Ideen, nur bringen die nicht das gewünschte Ergebnis.
Angenommen folgende XML-Datei ist gegeben:
<root>
<heading1>Headline1</heading1>
<para>Text</para>
<para>Text</para>
<listelement pos="1">first-1</listelement>
<listelement pos="2">second-1</listelement>
<listelement pos="3">third-1</listelement>
<para>Text</para>
<para>Text</para>
<heading2>Headline2-1</heading2>
<para>Text</para>
<para>Text</para>
<para>Text</para>
<listelement pos="1">first-2</listelement>
<listelement pos="2">second-2</listelement>
<listelement pos="3">third-2</listelement>
<para>Text</para>
<heading2>Headline2-2</heading2>
<para>Text</para>
<listelement pos="1">first-3</listelement>
<listelement pos="2">second-3</listelement>
<para>Text</para>
<para>Text</para>
</root>
Nun sollen zwei Strukturierungsvorgänge durchgeführt werden:
1. An Hand der Headings wird eine verschachtelte Struktur erstellt - das funktioniert auch.
2. Die Listenelemente sollen zu einer Liste gruppiert werden - funktioniert auch, aber es funktioniert eben nicht beides zusammen.
Hier die XSL-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<sect1>
<xsl:call-template name="struktur"/>
</sect1>
</xsl:template>
<xsl:template name="struktur">
<xsl:for-each-group select="//para|//heading1|//heading2|//listelement" group-starting-with="heading2">
xsl:choose
<xsl:when test="current()[self::heading2]">
<sect2>
<xsl:apply-templates select="current-group()"/>
</sect2>
</xsl:when>
xsl:otherwise
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
<xsl:template name="liste">
<xsl:for-each-group select="//listelement" group-starting-with="listelement[@pos='1']">
<liste>
<xsl:apply-templates select="current-group()"/>
</liste>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="heading1">
<title>
xsl:apply-templates/
</title>
</xsl:template>
<xsl:template match="heading2">
<title>
xsl:apply-templates/
</title>
</xsl:template>
<xsl:template match="para">
<p>
xsl:apply-templates/
</p>
</xsl:template>
<xsl:template match="listelement">
<li>
xsl:apply-templates/
</li>
</xsl:template>
</xsl:stylesheet>
Das Template namens liste würde ich gern irgenwie im Template struktur aufrufen. Aber ich weiß nicht, ob das der richtige Ansatz ist.
Für Hilfe wäre ich dankbar. Denn im Netz hab ich nichts gefunden oder in Büchern auch nicht - da waren es immer nur einfache Gruppierungen.
Mfg nero