|
next
|
Subject: No Topic Author: Adam Van den Hoven Date: 26 Sep 2001 05:00 PM
|
Ok,
Since I'm building templates that create HTML for Pocket IE, I've built a mechanism that reads a skin file (basically a CSS-like file in XML) takes the current node and does a very simple cascade, aggregates all the properties into one variable and then selects the first instance of each attribute and then applies those attributes to the content using HTML3.2 constructs (font, b, u, i, etc).
I'm having trouble with the template that selects the attributes to apply to the current node. I use a LOT of msxsl:node-set() functions. I'm getting an error in one line using the Stylus Studio parser (but not MSXML).
The template is:
{xsl:key name="AttribCascade" match="attrib" use="concat(@state, ':', @name)"/}
{xsl:template name="getSkinStyleAttribs"}
{xsl:param name="classname"/}
{xsl:param name="tagname"/}
{xsl:variable name="High" select="$Skin//rule[@class=$classname and @tag=$tagname]"/}
{xsl:variable name="Low" select="$Skin//rule[@class=$classname and not(@tag)] | $Skin//rule[not(@class) and @tag=$tagname]"/}
{xsl:variable name="HighAttribs"}
{xsl:for-each select="$High//attrib"}
{xsl:sort select="position()" order="descending"/}
{xsl:copy}
{xsl:if test="ancestor::rule/@state"}
{xsl:attribute name="state"}
{xsl:value-of select="ancestor::rule/@state"/}
{/xsl:attribute}
{/xsl:if}
{xsl:copy-of select="@* | node() | text()"/}
{/xsl:copy}
{/xsl:for-each}
{/xsl:variable}
{xsl:variable name="nodeHighAttribs" select="msxsl:node-set($HighAttribs)"/}
{xsl:variable name="LowAttribs"}
{xsl:for-each select="$Low//attrib"}
{xsl:sort select="position()" order="descending"/}
{xsl:copy}
{xsl:if test="ancestor::rule/@state"}
{xsl:attribute name="state"}
{xsl:value-of select="ancestor::rule/@state"/}
{/xsl:attribute}
{/xsl:if}
{xsl:copy-of select="@* | node() | text()"/}
{/xsl:copy}
{/xsl:for-each}
{/xsl:variable}
{xsl:variable name="nodeLowAttribs" select="msxsl:node-set($LowAttribs)"/}
{xsl:variable name="AllAttribs"}
{xsl:copy-of select="$nodeHighAttribs"/}
{xsl:copy-of select="$nodeLowAttribs"/}
{/xsl:variable}
{xsl:variable name="nodeAllAttribs" select="msxsl:node-set($AllAttribs)"/}
{xsl:copy-of select="$nodeAllAttribs//attrib[generate-id(.) = generate-id(key('AttribCascade',concat(@state, ':', @name))[1])]"/}
{/xsl:template}
The line:
{xsl:copy-of select="$nodeAllAttribs//attrib[generate-id(.) = generate-id(key('AttribCascade',concat(@state, ':', @name))[1])]"/}
generates an error:
cannot convert to node set. Now I suspect it has something to do with the key or generate-id or something.
Any ideas?
Adam
|
|
|