Hi there, I've looked through some of the grouping topics here, but wasn't able to find a real match so i'm hoping for some advice on what I'm doing wrong.
Here's my XML file :
Code:
<Book>
<File>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="L3">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="L1">
<Content>some data</Content>
</Para>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
</File>
</Book>
And what I'f like to get is the following ; All Para elements having BSub tag attribute should be renamed to 'li' and grouped in a ul, the rest remains unchanged for now. So below is the outcome I'd like to get :
Code:
<Book>
<File>
<ul>
<li tag="BSub">
<Content>some data</Content>
</li>
<li tag="BSub">
<Content>some data</Content>
</li>
<li tag="BSub">
<Content>some data</Content>
</li>
<li tag="BSub">
<Content>some data</Content>
</li>
</ul>
<Para tag="L3">
<Content>some data</Content>
</Para>
<ul>
<li tag="BSub">
<Content>some data</Content>
</li>
<li tag="BSub">
<Content>some data</Content>
</li>
<li tag="BSub">
<Content>some data</Content>
</li>
</ul>
<Para tag="L1">
<Content>some data</Content>
</Para>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
<ul>
<li tag="BSub">
<Content>some data</Content>
</li>
</ul>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
</File>
</Book>
The xslt I use is the following :
Code:
<xsl:template match="File">
<xsl:for-each-group select="Para" group-by="@tag = 'BSub'">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<ul>
<xsl:apply-templates select="current-group()"/>
</ul>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
But this results in following : All my BSub's are grouped in a single node, and all the rest is grouped in a second node. While what I wanted is more like
> Start at first node, as soon as you see BSub's group these till the next none BSub, and continue like this till you reach the end. For some reason I'm not able to grasp the logic behind grouping, and all example on the net are rather simplified. So, if you could tell me how to do it right (and even more important why I need to do it like that) I'd be very grateful.
Code:
<Book>
<ul>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
<Para tag="BSub">
<Content>some data</Content>
</Para>
</ul>
<Para tag="L3">
<Content>some data</Content>
</Para>
<Para tag="L1">
<Content>some data</Content>
</Para>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
<Para tag="B_bold">
<Content>some data</Content>
</Para>
</Book>