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