I'm struggling with a grouping problem. I've had some success with simpler
structures, but this one has me stumped. This is an XML to XML transform.
I need to eliminate the parent <para > completely, output the <table> intact,
but grab the <graphic> elements, create a single <figure>, then a <subfig>
wrapper element for each <graphic>. Then output the structures interspersed
with the tables. I can't seem to separate the tables and figures. What I'm
ending up with is a single <figure> with all the <subfig>, then the tables.
<install>
<proc>
<step1>
<para></para>
</step1>
</proc>
<para>
<table>
All the table stuff
</table>
<graphic>
<graphic>
<graphic>
<table>
All the table stuff
</table>
<graphic>
<graphic>
<graphic>
</para>
</install>
Output that I desire:
<install>
<step1>
<para></para>
<step1>
<table>
All the table stuff
</table>
<figure><title/>
<subfig><graphic></subfig>
<subfig><graphic></subfig>
<subfig><graphic></subfig>
</figure>
<table>
All the table stuff
</table>
<figure><title/>
<subfig><graphic></subfig>
<subfig><graphic></subfig>
<subfig><graphic></subfig>
</figure>
</install>
Output that I'm getting (and I've tried defining the group in various ways,
this is my last iteration).
<install>
<step1>
<para></para>
</step1>
<figure><title/>
<subfig><graphic/></subfig>
<subfig><graphic/></subfig>
<subfig><graphic/></subfig>
<subfig><graphic/></subfig>
<subfig><graphic/></subfig>
<subfig><graphic/></subfig>
</figure>
<table></table>
<table></table>
</install>
My current templates: (Wendell, my apologies for just not getting this). Using
XSLT 2.0.
<install>
<xsl:apply-templates select="descendant::step1"/>
<xsl:if test="child::proc/following-sibling::para/(child::table|graphic)">
<xsl:apply-templates
select="child::proc/following-sibling::para/child::table | child::para"
mode="install"/>
</xsl:if>
</install>
<xsl:template match="table" mode="install">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="install/para" mode="install">
<figure>
<xsl:for-each-group select="*" group-starting-with="graphic">
<xsl:for-each select="current-group()[self::graphic]">
<subfig>
<xsl:copy-of select="."/>
</subfig>
</xsl:for-each>
</xsl:for-each-group>
</figure>
</xsl:template>
Charles Flanders
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--