RE: [xsl] XSLT 1.0: Grouping Adjacent Elements in Embedded Lists

Subject: RE: [xsl] XSLT 1.0: Grouping Adjacent Elements in Embedded Lists
From: "Joe Heidenreich" <HeidenreichJ@xxxxxxxx>
Date: Fri, 5 Nov 2004 11:26:51 -0500
Ok, I've made slight progress on this by changing the following transforms so
that when I exit the embedded list, that is where I need to check if the next
item is in the top-level list. The changes are as follows:

<xsl:template match="OL_LI">
<xsl:if test="not(preceding-sibling::*[1][self::OL_LI|self::EM_OL_LI])">
	<p>
		<ol>
			<xsl:apply-templates select="." mode="li"/>
		</ol>
	</p>
</xsl:if>
</xsl:template>

<xsl:template name="OL_LI" match="OL_LI" mode="li">
	<li><xsl:apply-templates /></li>
	<xsl:apply-templates select="following-sibling::*[1][self::EM_OL_LI]"/>
	<xsl:apply-templates select="following-sibling::*[1][self::EM_UL_LI]"/>
	<xsl:apply-templates select="following-sibling::*[1][self::OL_LI]"
mode="li"/>
</xsl:template>

<xsl:template match="EM_OL_LI">
	<xsl:if test="not(preceding-sibling::*[1][self::EM_OL_LI])">
		<p>
			<ol>
				<xsl:apply-templates select="." mode="li"/>
			</ol>
		</p>
	</xsl:if>
	<xsl:apply-templates select="following-sibling::*[1][self::OL_LI]"
mode="li"/>
	<xsl:apply-templates select="following-sibling::*[1][self::UL_LI]"
mode="li"/>
</xsl:template>

<xsl:template match="EM_OL_LI" mode="li">
	<li><xsl:apply-templates/></li>
	<xsl:apply-templates select="following-sibling::*[1][self::EM_OL_LI]"
mode="li"/>
</xsl:template>



But now my problem is my output is:

<p>
   <ol>
      <li>Top: Item 1</li>
      <p>
         <ol>
            <li>Sub A: Item 1</li>
         </ol>
      </p>
      <li>Top: Item 2</li>
      <p>
         <ol>
            <li>Sub B: Item 1</li>
            <li>Sub B: Item 2</li>
            <li>Sub B: Item 3</li>
         </ol>
      </p>
   </ol>
</p>

And the list cuts off after the second item without continuing to the next
item. My output should be:

<p>
   <ol>
      <li>Top: Item 1</li>
      <p>
         <ol>
            <li>Sub A: Item 1</li>
         </ol>
      </p>
      <li>Top: Item 2</li>
      <p>
         <ol>
            <li>Sub B: Item 1</li>
            <li>Sub B: Item 2</li>
            <li>Sub B: Item 3</li>
         </ol>
      </p>
      <li>Top: Item 3</li>
      <p>
         <ol>
            <li>Sub C: Item 1</li>
            <li>Sub C: Item 2</li>
         </ol>
      </p>
   </ol>
</p>

Current Thread