# XSLT and sectN/section


This [came up during a recent Pandoc
discussion](http://groups.google.com/group/pandoc-discuss/browse_thread/thread/90cc2ea23e3c93f3/880bb6e69274ec1d?show_docid=880bb6e69274ec1d&fwc=2&pli=1).
The discussion was about outputting `<sectN>` section styling when creating DocBook XML. Currently
Pandoc outputs nested `<section>`s.

I argued you could easily change between the two formats and `<section>` is more flexible, so
just leave Pandoc as it is. But it allowed me to play with XSLT once more. With the following
results.

# Translate to sectN
This XSLT translates `<section>` to `<sectN>` where N is 5. If the sections are nested deeper
it switches to `<section>`.

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="section">
    <xsl:variable name="i" select="count(ancestor::node())"/>
        <xsl:choose>
            <xsl:when test="$i > 5">
                <section><xsl:apply-templates/></section>
            </xsl:when>
            <xsl:otherwise>
                <xsl:element name="sect{$i}"><xsl:apply-templates/></xsl:element>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    </xsl:stylesheet>

 Translate to section
And this translate `<sectN>` to `<section>`, this was slightly easier, as you 
don't have to count anything.

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="sect1 | sect2 | sect3 | sect4 | sect5">
        <section><xsl:apply-templates/></section>
    </xsl:template>
    </xsl:stylesheet>


