RE: [xsl] Using vars

Subject: RE: [xsl] Using vars
From: xptm@xxxxxxx
Date: Tue, 27 Jul 2004 14:00:55 +0100
Hi:

I keep forgeting that when i hit reply the msg does not go to the list, but
to
the person that send the original msg...

I've sended a reply to Tom clarifying some of his points.

I can't test this beacause i'm just writing a "framework" that will be feed
with
xml's not know to me at the time, i'm just working with a couple of examples.
So i don't know how big the tree can be.

But as Tom pointed, there is also the question of clarity and maintenence.

I've came up with this, folowing both your sugestions:

    <xsl:variable name='zoom-base'
select="/Formatos/Forms/Form/Grids/Grid/Zooms/Zoom[ModoZoom[contains(.,
'Z')]]"/>  --> it changes from the 'xxx'
    <xsl:variable name='pages'>
      <xsl:for-each select="$zoom-base"><xsl:value-of select="FormZoom"
/>:</xsl:for-each>
    </xsl:variable>
    <xsl:variable name='params'>
      <xsl:for-each select="$zoom-base"><xsl:value-of select="ParametroZoom"
/>:</xsl:for-each>
    </xsl:variable>

now i can use these vars in various places...

      <Event method="tablemouse" type="MouseHandler" target="GridPanel">
        <xsl:attribute name="next"><xsl:value-of select="$pages"
/></xsl:attribute>
        <xsl:attribute name="params"><xsl:value-of select="$params"
/></xsl:attribute>
      </Event>
      <xsl:for-each select="/Formatos/Forms/Form/Grids/Grid">
        <Event method="tablemouse" type="MouseHandler">
          <xsl:attribute name="target"><xsl:value-of select="@Nome"
/></xsl:attribute>
          <xsl:attribute name="next"><xsl:value-of select="$pages"
/></xsl:attribute>
          <xsl:attribute name="params"><xsl:value-of select="$params"
/></xsl:attribute>
        </Event>
        <Event method="tablemouse" type="MouseHandler">
          <xsl:attribute name="target"><xsl:value-of
select="concat('SPane_',@Nome)" /></xsl:attribute>
          <xsl:attribute name="next"><xsl:value-of select="$pages"
/></xsl:attribute>
          <xsl:attribute name="params"><xsl:value-of select="$params"
/></xsl:attribute>
        </Event>
      </xsl:for-each>
      <Event method="nextPage" target="btnProceed" type="ActionHandler">
        <xsl:attribute name="next"><xsl:value-of select="$pages"
/></xsl:attribute>
        <xsl:attribute name="params"><xsl:value-of select="$params"
/></xsl:attribute>
       </Event>


It seems clear and maintenable, but don't know about the performance. I guess
i
just wait and see if the problem ever arises...


Thanks all.



Citando Michael Kay <mhk@xxxxxxxxx>:

> You can't ask questions about performance without saying what XSLT
processor
> you are using, and you can't reliably answer them except by measuring and
> comparing.
>
> My own approach would be to define one variable:
>
> <xsl:variable name="pages"
>   select="/Formatos/Forms/Form/Grids/Grid/Zooms/Zoom[@Coluna!='xxx']" />
>
> and then do:
>
> <xsl:for-each select="$pages/FormZoom">
>
> <xsl:for-each select="$pages/ParametroZoom">
>
> I've no idea how the performance will compare on any given processor, but
> the code seems better structured that way.
>
> Michael Kay
>
>
>
>
>
> > -----Original Message-----
> > From: xptm [mailto:xptm@xxxxxxx]
> > Sent: 26 July 2004 19:09
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Using vars
> >
> > In terms of performance, what will be the best way to do
> > this?  Having:
> >
> > <Formatos>
> >   <Forms>
> >     <Form Nome="ProcessoTipoGrupoListaDoc">
> >       <Grids>
> >         <Grid Nome="ProcessoTipoGrupoLista_Grid"
> > SourceObject="ProcessoTipoGrupoLista_Grid">
> >           <Zooms>
> >             <Zoom Coluna="ProcessoTipoGrupo">
> >               <FormZoom>ProcessoTipoGrupoDoc</FormZoom>
> >               <ModoZoom>AZ</ModoZoom>
> >               <ParametroZoom>ProcessoTipoGrupo</ParametroZoom>
> >             </Zoom>
> >           </Zooms>
> >         </Grid>
> >       </Grids>
> >       (*/ n Grids/ *)
> >     </Form>
> >   </Forms>
> > </Formatos>
> >
> > should i use one variable like
> >
> > <xsl:template name="StandardEvents">
> >   <Events>
> >     <xsl:variable name="pages"
> >
> > select="/Formatos/Forms/Form/Grids/Grid/Zooms/Zoom[@Coluna!='x
> > xx']/*[name()='FormZoom'
> > or name()='ParametroZoom']" />
> >     <Event method="tablemouse" type="MouseHandler">
> >             <xsl:attribute name="target">GridPanel</xsl:attribute>
> >             <xsl:attribute name="next">
> >               <xsl:for-each select="$pages">
> >                 <xsl:if test="name()='FormZoom'">
> >                   <xsl:value-of select="." />
> >                   <xsl:text>:</xsl:text>
> >                 </xsl:if>
> >               </xsl:for-each>
> >             </xsl:attribute>
> >             <xsl:attribute name="params">
> >               <xsl:for-each select="$pages">
> >                 <xsl:if test="name()='ParametroZoom'">
> >                   <xsl:value-of select="." />
> >                   <xsl:text>:</xsl:text>
> >                 </xsl:if>
> >               </xsl:for-each>
> >             </xsl:attribute>
> >     </Event>
> >   </Events>
> > </xsl:template>
> >
> >
> > or two vars, like
> >
> > <xsl:template name="StandardEvents">
> >   <Events>
> >      <xsl:variable name="pages">
> >             <xsl:for-each
> > select="/Formatos/Forms/Form/Grids/Grid/Zooms/Zoom[@Coluna!='xxx']">
> >               <xsl:value-of select="concat(ParametroZoom,':')" />
> >             </xsl:for-each>
> >      </xsl:variable>
> >      <xsl:variable name="params">
> >           <xsl:for-each
> > select="/Formatos/Forms/Form/Grids/Grid/Zooms/Zoom[@Coluna!='xxx']">
> >             <xsl:value-of select="concat(ParametroZoom,':')" />
> >           </xsl:for-each>
> >      </xsl:variable>
> >
> >      <Event method="tablemouse" type="MouseHandler">
> >             <xsl:attribute name="target">GridPanel</xsl:attribute>
> >             <xsl:attribute name="next">
> >               <xsl:value-of select="$pages" />
> >             </xsl:attribute>
> >             <xsl:attribute name="params">
> >               <xsl:value-of select="$params" />
> >             </xsl:attribute>
> >            </xsl:attribute>
> >     </Event>
> >   </Events>
> > </xsl:template>
> >
> >
> > If i understand correctly, the first only traverses the tree once and
> > the second two times, so if the tree is very big the first
> > option is better?
> >
> > Thxs.
>
>







O SAPO ja esta livre de vmrus com a Panda Software, fique vocj tambim!
Clique em: http://antivirus.sapo.pt

Current Thread