1 <?xml version="1.0" encoding="utf-8"?> 2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 version="1.0"> 4 5 <xsl:param name="status"/> 6 7 <!-- Add or process status elements inside status elements. --> 8 9 <xsl:template match="candidate"> 10 <!-- Copy the element and its contents. --> 11 <xsl:copy> 12 <xsl:apply-templates select="@*"/> 13 <identity> 14 <xsl:apply-templates select="identity/@*"/> 15 </identity> 16 <!-- Look for a status element. --> 17 <xsl:call-template name="status"/> 18 <skills> 19 <xsl:apply-templates select="skills/*"/> 20 </skills> 21 <qualifications> 22 <xsl:apply-templates select="qualifications/*"/> 23 </qualifications> 24 <experience> 25 <xsl:apply-templates select="experience/*"/> 26 </experience> 27 </xsl:copy> 28 </xsl:template> 29 30 <!-- Investigate status elements. --> 31 32 <xsl:template name="status"> 33 <!-- Make the element. --> 34 <status> 35 <xsl:apply-templates select="status/@*"/> 36 <xsl:call-template name="status-enum"/> 37 </status> 38 </xsl:template> 39 40 <!-- Add to status elements the range of acceptable values. --> 41 42 <xsl:template name="status-enum"> 43 <!-- Find all values in the range and add them. --> 44 <xsl:for-each select="$status/status/status-enum"> 45 <xsl:copy> 46 <xsl:apply-templates select="@*"/> 47 </xsl:copy> 48 </xsl:for-each> 49 </xsl:template> 50 51 <!-- Replicate unknown elements. --> 52 53 <xsl:template match="@*|*|node()"> 54 <xsl:copy> 55 <xsl:apply-templates select="@*|*|node()"/> 56 </xsl:copy> 57 </xsl:template> 58 59 </xsl:stylesheet>