[Home] [By Thread] [By Date] [Recent Entries]
On 30/06/2011 21:23, Michael Kay wrote:
No, within a named template it's not statically decidable. The named template might be called from within a function. yes (that's the usual way the context gets undefined) but what I meant was that the author of the stylesheet can write the template as <xsl:template name=x"> <xsl:param name="hascontext" select="true()"/> .. then use <xsl:call-template name="x"> <xsl:with-param name="hascontext" select="false()"/> whenever it is being called from within a function. In theory chained named template application make it hard to know when you have no current item, but in practice for most stylesheets you probably know. that way, the template has available a boolean that's true if there is a current item.
when i was playing wuth xquery to xslt conversion a while back and came up against this quite a lot, I found it easiest just to ensure that there was always a current item (or that the code was skipped) by never using the implicit current item for a named template and always doing <xsl:template name=x"> <xsl:param name="context" select="()"/> <xsl:value-of select="$context/a/b/c"/> then passing in "." as the context param just at points that you know it's available, which ends up being more or less equivalent to just always using functions and always passing the context explicitly (which, unsurprisingly given the context of that project, is essentially the xquery way of doing things) David
|

Cart



