[xsl] Converting logical <em>s to physical <i>s (nesting problem)

Subject: [xsl] Converting logical <em>s to physical <i>s (nesting problem)
From: Michael Stillwell <mjs@xxxxxxxxx>
Date: Fri, 18 Jan 2002 10:34:04 +1100
How can I convert <em>s to <i>s, such that "nested" <em>s are either italic or not italic as appropriate? That is, I want

<em>This is <em>emphasised</em>!</em>

to be converted into

<i>This is </i>emphasised<i>!</i>

The following almost works:

  <xsl:template match="em">
  <xsl:choose>
    <xsl:when test="count(ancestor::em) mod 2 = 0">
      <em><xsl:apply-templates/></em>
    </xsl:when>
    <xsl:otherwise>
      </em><xsl:apply-templates/><em>
    </xsl:otherwise>
  </xsl:choose>
  </xsl:template>

failing only because the contents of the "otherwise" clause aren't nested properly.

By the way, what's the best was to "pass through" unknown tags? I currently use

  <xsl:template match="*">
  <xsl:element name="{name(.)}">
  <xsl:copy-of select="@*"/>
  <xsl:apply-templates/>
  </xsl:element>
  </xsl:template>



Michael

--
http://beebo.org


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread