File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data> <chapter> <title>Chapter 1</title> <comment>This is a comment</comment> <paragraph>And this is some text</p> </chapter> <chapter> <title>Chapter 2</title> <paragraph>This is some text as well</p> </chapter> </data> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <H2>TOC</H2> <xsl:for-each select="//chapter"> <xsl:apply-templates select="." mode="toc" /> </xsl:for-each> <H2>TEXT</H2> <xsl:for-each select="//chapter"> <xsl:apply-templates select="." /> </xsl:for-each> </xsl:template> <xsl:template match="chapter"> <xsl:apply-templates select="*" /> </xsl:template> <xsl:template match="chapter" mode="toc"> <xsl:apply-templates select="*" mode="toc" /> </xsl:template> <xsl:template match="title"> <H3 style="color:blue"> <xsl:value-of select="." /> </H3> </xsl:template> <xsl:template match="title" mode="toc"> <H3 style="color:red"> <xsl:value-of select="." /> </H3> </xsl:template> <xsl:template match="comment" mode="toc"> [ <i> <xsl:value-of select="." /> </i> ] </xsl:template> <xsl:template match="comment"> <i> <xsl:value-of select="." /> </i> </xsl:template> <xsl:template match="p" mode="toc" /> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><H2>TOC</H2><H3 style="color:red">Chapter 1</H3> [ <i>This is a comment</i> ] <H3 style="color:red">Chapter 2</H3><H2>TEXT</H2><H3 style="color:blue">Chapter 1</H3><i>This is a comment</i>And this is some text<H3 style="color:blue">Chapter 2</H3>This is some text as well