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>