File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data> <AAA> <BBB> <CCC>A</CCC> </BBB> <BBB/> <BBB/> </AAA> <AAA> <BBB/> <BBB> <CCC>B</CCC> <CCC>C</CCC> <CCC>D</CCC> <CCC>E</CCC> </BBB> </AAA> </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="/"> <DIV> <xsl:for-each select="//BBB"> <xsl:call-template name="printout"/> </xsl:for-each> </DIV> <DIV> <xsl:apply-templates select="//CCC"/> </DIV> <DIV> <xsl:apply-templates select="//AAA[last()]//CCC"/> </DIV> </xsl:template> <xsl:template match="CCC"> <xsl:call-template name="printout"/> </xsl:template> <xsl:template name="printout"> <xsl:if test="position()=1"> <xsl:value-of select="name()"/> </xsl:if> <xsl:text>(</xsl:text> <xsl:value-of select="position()"/> <xsl:text>/</xsl:text> <xsl:value-of select="last()"/> <xsl:text>)</xsl:text> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><DIV>BBB(1/5)(2/5)(3/5)(4/5)(5/5)</DIV><DIV>CCC(1/5)(2/5)(3/5)(4/5)(5/5)</DIV><DIV>CCC(1/4)(2/4)(3/4)(4/4)</DIV>