Forum Moderators: open
After our DTD guys simplified our DTD to change steps and substeps into nested steps, I now have the dificulty of inserting an <ol> when a step is nested (in fact a substep).
XML:
<step>Do the following:
<step>Select: Start</step>
<step>Select: Yes</step>
</step>
XSLT so far (unsuccessful): I tried with xsl:if to see if the parent (..) equals the element 'step', so a match on step with parent step gets extra <ol> in front.
<xsl:template match="step">
<xsl:if test="..='step'">
insert ol if first and /ol if last (no problem here)
</xsl:if>
</xsl:template>
I considered doing two templates for step and step/step, but fear nested steps will be processed twice or three times.
I'm using WinXP and XMLspy to create the XSLT. And Solaris and Perl + Sablotron as a production system.
Someone must have had and solved this same problem... Apparently I googled for the wrong search terms.
Thanks,
MalibuMan
I haven't been able to test this (pretty late in this time zone), but I wonder if it might be better to work in the opposite direction, using recursion, if you get the idea:
<xsl:template match="instructions">
<ol>
<!-- process all steps which are children of the root -->
<xsl:apply-templates match="step" />
</ol>
</xsl:template>
<xsl:template match="step">
<li><xsl:value-of select="text()"/>
<!-- if this step has children , do it all over again -->
<xsl:if test="boolean(step)">
<ol>
<xsl:apply-templates />
</ol>
</xsl:if>
</li>
</xsl:template>