1 <?xml version="1.0" encoding="utf-8"?> 2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 xmlns:template="http://www.boddie.org.uk/ns/xmltools/template" 4 version="1.0"> 5 6 <xsl:param name="categories"/> 7 8 <xsl:template match="package"> 9 <xsl:copy> 10 <xsl:apply-templates select="@*"/> 11 <xsl:apply-templates select="*[local-name() != 'categories']"/> 12 <xsl:call-template name="complete-categories"> 13 <xsl:with-param name="category-elements" select="categories/category/category-enum"/> 14 </xsl:call-template> 15 </xsl:copy> 16 </xsl:template> 17 18 <xsl:template name="complete-categories"> 19 <xsl:param name="category-elements"/> 20 <categories> 21 <xsl:element name="category"> 22 <xsl:for-each select="$categories/category/category-enum"> 23 <xsl:variable name="category-enum" select="."/> 24 <xsl:copy> 25 <xsl:apply-templates select="@*"/> 26 <xsl:if test="$category-elements[@value = $category-enum/@value]"> 27 <xsl:attribute name="value-is-set">true</xsl:attribute> 28 </xsl:if> 29 </xsl:copy> 30 </xsl:for-each> 31 </xsl:element> 32 </categories> 33 </xsl:template> 34 35 <!-- Replicate unknown elements. --> 36 37 <xsl:template match="@*|node()"> 38 <xsl:copy> 39 <xsl:apply-templates select="@*|node()"/> 40 </xsl:copy> 41 </xsl:template> 42 43 </xsl:stylesheet>