[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
I have a source document something like:
I would like to translate this to something like
I thought I could do this with something like:
<xsl:if test="preceding-sibling::para/@style='LS1' and following-sibling::para/@style='LS1'">
<li><xsl:value-of select="."/></li>
</xsl:if>
<xsl:if test="preceding-sibling::para/@style='LS1' and not(following-sibling::para/@style='LS1')">
<li><xsl:value-of select="."/></li>
</ul>
</xsl:if>
</xsl:if>
But of course that won't work. Then, I thought I could do it with recursion, passing the current para element as a variable:
But that doesn't change the context to the preceding-sibling, so it loops.
Any suggestions?
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
[xsl] Converting siblings to children of a node.
Subject: [xsl] Converting siblings to children of a node. From: "Shawn O. McKenzie" <smckenzie@xxxxxxxxxxx> Date: Wed, 06 Aug 2003 18:22:37 -0700 |
I have a source document something like:
<longdesc> <para style="Normal">This is a regular paragraph.</para> <para style="Normal">So is this but what follows is a list:</para> <para style="LS1">Item one</para> <para style="LS1">Item two</para> <para style="Normal">This is a regular paragraph.</para> <para style="Normal">This is a regular paragraph.</para> <para style="Normal">This is a regular paragraph.</para> <para style="Normal">What follows is a list:</para> <para style="LS1">Item one</para> <para style="LS1">Item two</para> <para style="LS1">Item three</para> <para style="Normal">This is a regular paragraph.</para> </longdesc>
I would like to translate this to something like
<p>This is a regular paragraph.</p> <p>So is this but what follows is a list:</p> <ul> <li>Item one<li> <li>Item two<li> </ul> <p>This is a regular paragraph.</p> <p>This is a regular paragraph.</p> <p>This is a regular paragraph.</p> <p>What follows is a list:</p> <ul> <li>Item one<li> <li>Item two<li> <li>Item three<li> </ul> <p>This is a regular paragraph.</p>
I thought I could do this with something like:
<xsl:if test="@style='LS1'"> <xsl:if test="not(preceding-sibling::para/@style='LS1')"> <ul> <li><xsl:value-of select="."/></li> </xsl:if>
<xsl:if test="preceding-sibling::para/@style='LS1' and following-sibling::para/@style='LS1'">
<li><xsl:value-of select="."/></li>
</xsl:if>
<xsl:if test="preceding-sibling::para/@style='LS1' and not(following-sibling::para/@style='LS1')">
<li><xsl:value-of select="."/></li>
</ul>
</xsl:if>
</xsl:if>
But of course that won't work. Then, I thought I could do it with recursion, passing the current para element as a variable:
<xsl:template match="para[@style='LS1']"> <xsl:if test="not(preceding-sibling::para[@style='LS1'])"> <xsl:variable name="node"> <xsl:copy-of select="."/> </xsl:variable> <ul> <xsl:call-template name="list"> <xsl:with-param name="listitem" select="$node"/> </xsl:call-template> </ul> </xsl:if> </xsl:template>
<xsl:template name="list"> <xsl:param name="listitem"/> <li><xsl:value-of select="$listitem"/></li> <xsl:if test="following-sibling::para[@style='LS1']"> <xsl:call-template name="list"> <xsl:with-param name="listitem"> <xsl:copy-of select="following-sibling::para"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template>
But that doesn't change the context to the preceding-sibling, so it loops.
Any suggestions?
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Antenna House XSL Formatter B, Keiko Hiraide | Thread | Re: [xsl] Converting siblings to ch, Mark Brand |
[xsl] Antenna House XSL Formatter B, Keiko Hiraide | Date | Re: [xsl] Converting siblings to ch, Mark Brand |
Month |