xsl-list
[Top] [All Lists]

Re: [xsl] Optimisation -- premature?

2007-02-12 02:53:24
On 2/11/07, John Horner <Horner(_dot_)John(_at_)abc(_dot_)net(_dot_)au> wrote:
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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>