rendered paste body<?xml version="1.0" encoding="UTF-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt" > <xsl:template match="/"> <xsl:variable name="sorted"> <xsl:apply-templates select="students/student"> <xsl:sort select="name/lastname" /> </xsl:apply-templates> </xsl:variable> <xsl:for-each select="exslt:node-set($sorted)/student"> <xsl:if test="not(preceding-sibling::student[1]/name = name)"> <hr /> </xsl:if> <p> <xsl:value-of select="position()" /> <xsl:text> </xsl:text> <xsl:value-of select="name/firstname" /> <xsl:text> </xsl:text> <xsl:value-of select="name/lastname" /> </p> <xsl:text>
</xsl:text> <!--* newline for readability of output *--> </xsl:for-each> </xsl:template> <xsl:template match="student"> <student> <xsl:copy-of select="name" /> </student> </xsl:template></xsl:stylesheet>and the input,<students> <student> <name><firstname>David</firstname><lastname>Pilgrim</lastname></name> <age>14</age> <hair>fair</hair> </student> <student> <name><firstname>Paul</firstname><lastname>Frey</lastname></name> <age>16</age> <hair>brown</hair> </student> <student> <name><firstname>Dawn</firstname><lastname>Bostock</lastname></name> <age>14</age> <hair>light brown</hair> </student> <student> <name><firstname>David</firstname><lastname>Hayhurst</lastname></name> <age>15</age> <hair>red</hair> </student> <student> <name><firstname>Andrew</firstname><lastname>Wild</lastname></name> <age>17</age> <hair>fair</hair> </student> <student> <name><firstname>David</firstname><lastname>Pilgrim</lastname></name> <age>14</age> <hair>fair</hair> </student></students>and the output$ xsltproc split.xslt students.xml <?xml version="1.0"?><hr/><p>1 Dawn Bostock</p><hr/><p>2 Paul Frey</p><hr/><p>3 David Hayhurst</p><hr/><p>4 David Pilgrim</p><p>5 David Pilgrim</p><hr/><p>6 Andrew Wild</p>