Subject: Re: [xsl] Optimisation -- premature? From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Mon, 12 Feb 2007 09:53:08 +0000 |
I have a transformation which sometimes, depending on circumstances, creates bunch of variables used in an external function.
Let's say that logic is like this:
<xsl:if test="a_certain_flag_is_set"> <xsl:variable name="foo" select="foo"/> <xsl:variable name="bar" select="bar"/> <xsl:variable name="baz" select="baz"/> <xsl:value-of select="namespace:function($foo,$bar,$baz)"/> </xsl:if>
That's OK except that elsewhere in the stylesheet, if a different and mutually exclusive flag is set, I need to create exactly the same variables
<xsl:if test="a_different_flag_is_set"> <xsl:variable name="foo" select="foo"/> <xsl:variable name="bar" select="bar"/> <xsl:variable name="baz" select="baz"/> <xsl:value-of select="namespace:function($foo,$bar,$baz)"/> </xsl:if>
I want to be more efficient about this, and would rather do this at the top of the stylesheet
<xsl:if test="a_certain_flag_is_set or a_different_flag_is_set"> <xsl:variable name="foo" select="foo"/> <xsl:variable name="bar"select="bar"/> <xsl:variable name="baz" select="baz"/> </xsl:if>
That is, create them once, if they're going to be needed by either function later in the processing. Because of the way scope works in XSL, I can't do this, can I? So, which of the two less efficient methods is best -- create them every time the process runs, although I may not need them, or duplicate their creation locally in the separate if-elements?
It's not a problem as such, the process works just fine, but it's bugging me a little that I can't do it the "right" way.
It's a bit hard to say going on the samples you've provided, but some suggestions are:
- Separate out the duplicate code into named templates or functions (in 2.0). Usually named templates are best when element creation is needed, functions are best for computing values.
- If you have distinct choose/when/otherwise blocks then separate them out into specific stylesheets that import a common stylesheet.
- Define the common variables "higher up" and use tunneling to get them to the templates where they're used (again a 2.0 feature).
cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Optimisation -- premature?, John Horner | Thread | [xsl] for-each-group, group-startin, Matt Poff |
Re: [xsl] how to test previous node, Andrew Welch | Date | Re: [xsl] how to test previous node, Abel Braaksma |
Month |