[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Bad practice

Subject: RE: Bad practice
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 8 Apr 2005 16:13:50 +0100
construction bad practice
> I hope this message gets to the list, cause my last fews 
> seems that don't. 

You last message got there (twice), but for some reason no-one answered it.
> 
> What are the consequences of a construction like this in terms of
> performance, and what about coding style?
> 
> I'm creating a table like this where diasemana.xml is a xml
> representation of week days:
> 
> 			<table id="{$t}" border="1">
> 				<th>Processo</th>
> 				<xsl:for-each 
> select="document('diassemana.xml')/dias/dia">
> 					<th>
> 						<xsl:value-of 
> select="@txt"/>
> 					</th>
> 				</xsl:for-each>
> 				<xsl:apply-templates 
> select="/GHoras/Processos/Processo"/>
> 			</table>
> 
> 	<xsl:template match="Processo">
> 		<tr prK="{Processo_K}">
> 			<xsl:variable name="this" select="."/>
> 			<td>
> 				<xsl:value-of select="NomeProcesso"/>
> 			</td>
> 			<xsl:for-each 
> select="document('diassemana.xml')/dias/dia">
> 				<xsl:variable name="pos" 
> select="position()"/>
> 				<xsl:for-each select="$this">
> 					<xsl:call-template 
> name="edhoras">
> 						<xsl:with-param 
> name="dia" select="$pos"/>
> 					</xsl:call-template>
> 				</xsl:for-each>
> 			</xsl:for-each>
> 		</tr>
> 	</xsl:template>
> 
> This second use of document() serves only to do a 7th time loop,
> without using any data, and the nested for-each is simply to change
> context.
> 
> Is this a bad practice?

No, not especially. But when a named template is dependent on the context
node, it can often be better to make it a match template instead, perhaps
with a specific mode. Then you could replace 

<xsl:for-each select="document('diassemana.xml')/dias/dia">
  <xsl:variable name="pos" select="position()"/>
  <xsl:for-each select="$this">
      <xsl:call-template name="edhoras">
        <xsl:with-param name="dia" select="$pos"/>
      </xsl:call-template>
  </xsl:for-each>
</xsl:for-each>

with

<xsl:for-each select="document('diassemana.xml')/dias/dia">
  <xsl:apply-templates select="$this" mode="edhoras">
    <xsl:with-param name="dia" select="position()"/>
  </
</

Michael Kay
http://www.saxonica.com/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.