All pastes #1873221 Raw Edit

exslt:node-set

public xml v1 · immutable
#1873221 ·published 2010-05-28 03:19 UTC
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>&#xa;</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>