|
Subject: RE: [xsl] controller stylsheet. performance, best practices question From: "Michael Kay" <mhk@xxxxxxxxx> Date: Wed, 23 Apr 2003 09:04:49 +0100 |
An alternative you might consider is the Novatchev "dynamic templates"
method.
Change
<xsl:template name="xyz">
to
<xsl:template match="xyzPage" mode="switch">
<xsl:param name="$current-node"/>
Create an element <xyz/> (e.g. in a document switch.xml)
Change
<xsl:choose>
<xsl:when test="$p='xyz'">
<xsl:call-template name="xyzPage"/>
etc. etc.
to
<xsl:apply-templates
select="document('switch.xml')/switch/*[name()=$p]">
<xsl:with-param name="current-node" select="."/>
</xsl:apply-templates>
For greater efficiency, use keys.
Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> Terence Kearns
> Sent: 23 April 2003 07:46
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] controller stylsheet. performance, best
> practices question
>
>
> In an application I'm building, I've found myself applying an MVC
> pattern to how I call templates. I have once stylesheet used
> by all my
> web-based server scripts (PHP scripts). This website then calls
> different templates based on the context of the script.
> Here is the script, questions to follow:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet
> version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <!-- import templates implementing dynamic content -->
> <xsl:import href="xsl-inc_finder.xsl" />
> <xsl:import href="xsl-inc_subjects.xsl" />
> <xsl:import href="xsl-inc_requirements.xsl" />
> <xsl:import href="xsl-inc_listing.xsl" />
> <xsl:import href="xsl-inc_login.xsl" />
>
> <!-- set context used by the controller -->
> <xsl:param name="op" select="'<?php echo @$_GET["op"]; ?>'" />
>
> <!-- BEGIN MAIN PAGE TEMPLATE-->
> <xsl:template match="/">
> <!-- blah blah blah. masses of literal content
> goes here -->
> <!-- CALLS TO THE MAIN CONTENT BEGIN HERE -->
> <xsl:choose>
> <xsl:when test="$op = 'finder'">
> <xsl:call-template name="finderPage" />
> </xsl:when>
> <xsl:when test="$op = 'subjects'">
> <xsl:call-template name="subjectsPage" />
> </xsl:when>
> <xsl:when test="$op = 'login'">
> <xsl:call-template name="loginPage" />
> </xsl:when>
> </xsl:choose>
> <!-- CALLS TO THE MAIN CONTENT END HERE -->
> <!-- blah blah blah. masses of literal content
> goes here -->
> </xsl:template>
> <!-- END MAIN PAGE TEMPLATE-->
>
> </xsl:stylesheet>
>
>
>
> Functionally, this appoach seems to work well for me. My
> questions is: Is taking this sort of approach prone to big
> performance problems? I can see that in many cases, most of
> the templates imported at the top
> of the style sheet will not even be used. They can't be
> included on the
> fly because they need to be top-level (can't be nested inside IF or
> CHOOSE).*
>
> Any other observations about the merits of this approach appreciated.
>
> cheers.
>
> * I could probably use PHP code to include it on the fly, but
> I want to
> avoid doing so because I've made a rule for myself not to use
> server-side code embedded in the stylesheet. I've done so in
> the param
> of this example for purposes of clarity, normally I would
> send them to
> the processor directly from the PHP function call.
>
>
> --
> Terence Kearns: Web Developer
> University of Canberra: +61 2 6201 5516
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] controller stylsheet. per, Terence Kearns | Thread | Re: [xsl] controller stylsheet. per, Terence Kearns |
| [xsl] Tail recursion (WAS: Grouping, Conal Tuohy | Date | RE: [xsl] concatenated key, David . Pawson |
| Month |