Hi,
I am not sure how I should approach this problem. I am trying to group <para>'s based on values. for example, in this sample xml file:
Code:
<book>
<para config="start">start first</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="end">first group end</para>
<para>data</para>
<para>data</para>
<para config="start">start second</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="end">second group end</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para config="start">start end</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="middle">data</para>
<para config="end">third group end</para>
<para>data</para>
<para>data</para>
<para>data</para>
</book>
I want to group each para by the @config attribute (start, beginning and end).
desired output:
Code:
<book>
<table>
<para>first group end</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>first group end</para>
</table>
<para>data</para>
<para>data</para>
<para/>
<table>
<para>second group end</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>second group end</para>
</table>
<para>data</para>
<para>data</para>
<para>data</para>
<table>
<para>third group end</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>data</para>
<para>third group end</para>
</table>
<para>data</para>
<para>data</para>
<para>data</para>
</book>
Here is my xslt so far, which does not work. Should or could I use the for-each-group ?
Code:
<xsl:template match="para">
<xsl:choose>
<xsl:when test="@config='start'">
<xsl:if test="@config='start'">
<xsl:element name="para">
<xsl:apply-templates select="self::*[para][1]" />
</xsl:element>
</xsl:if>
<table>
<xsl:for-each select="following-sibling::para[@config='mid']">
<xsl:comment>Para is mid</xsl:comment>
<xsl:element name="para">
<xsl:apply-templates/>
</xsl:element>
</xsl:for-each>
<xsl:if test="following-sibling::para[@config='end'][1]">
<xsl:for-each select="following-sibling::para[@config='end'][1]">
<xsl:element name="para">
<xsl:apply-templates/>
</xsl:element>
</xsl:for-each>
</xsl:if>
</table>
</xsl:when>
<xsl:otherwise>
<xsl:element name="para">
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>