Re: [xsl] Outputing the same value-of for different nodes

Subject: Re: [xsl] Outputing the same value-of for different nodes
From: "Jay Bryant" <jay@xxxxxxxxxxxx>
Date: Wed, 22 Feb 2006 10:56:18 -0600
Mike Kay and the other transformation engine developers might be able to
answer to provide some details about optimization. However, I suspect the
only way you'll find the best performance is to set up a number of different
solutions and test them with the engine of your choice.

Jay Bryant
Bryant Communication Services

----- Original Message ----- 
From: "Liron" <magilam@xxxxxxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, February 22, 2006 10:47 AM
Subject: Re: [xsl] Outputing the same value-of for different nodes


> Thank you for your reply,
>
> I realize that this solution is quite simple but I was more curious about
> the performance. If I apply the same template twice (or more) will any
good
> engine optimize that some how or will it select "son" twice (or more)?
>
> Thank you
> Liron
>
> ----- Original Message ----- 
> From: "Jay Bryant" <jay@xxxxxxxxxxxx>
> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Sent: Wednesday, February 22, 2006 5:39 PM
> Subject: Re: [xsl] Outputing the same value-of for different nodes
>
>
> > If you use templates rather than for-each, this is a fairly natural
> > operation for XSLT. Then you just need to apply the son template twice,
> > thus:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >
> >  <xsl:output method="xml" indent="yes"/>
> >
> >  <xsl:template match="tree">
> >    <xsl:copy>
> >      <first>
> >        <xsl:apply-templates/>
> >      </first>
> >      <second>
> >        <xsl:apply-templates/>
> >      </second>
> >    </xsl:copy>
> >  </xsl:template>
> >
> >  <xsl:template match="son">
> >    <xsl:copy>
> >      <xsl:apply-templates/>
> >    </xsl:copy>
> >  </xsl:template>
> >
> >  <xsl:template match="value">
> >    <xsl:copy>
> >      <xsl:value-of select="."/><position><xsl:value-of
> > select="count(preceding::value) + 1"/></position>
> >    </xsl:copy>
> >  </xsl:template>
> >
> > </xsl:stylesheet>
> >
> > Jay Bryant
> > Bryant Communication Services
> >
> >
> >
> > ----- Original Message ----- 
> > From: "Liron" <magilam@xxxxxxxxxxxxxxxx>
> > To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> > Sent: Wednesday, February 22, 2006 10:19 AM
> > Subject: [xsl] Outputing the same value-of for different nodes
> >
> >
> >> Hello,
> >>
> >> I wanted to ask how to output the same value on different nodes without
> >> effecting performance. Here's an example:
> >>
> >> original xml file:
> >>
> >> <tree>
> >>    <son><value>something1</value></son>
> >>    <son><value>something2</value></son>
> >>    <son><value>something3</value></son>
> >> </tree>
> >>
> >> Lets assume I want to output something like this:
> >>
> >> <tree>
> >>    <first>
> >>        <son><value>something1><position>1</position></value></son>
> >>        <son><value>something2><position>2</position></value></son>
> >>        <son><value>something3><position>3</position></value></son>
> >>    </first>
> >>    <second>
> >>        <son><value>something1><position>1</position></value></son>
> >>        <son><value>something2><position>2</position></value></son>
> >>        <son><value>something3><position>3</position></value></son>
> >>    </second>
> >> </tree>
> >>
> >> This is just an example so please don't question the need for such an
> > output
> >> ;)
> >>
> >> In my xslt I'd probably use a xsl:for-each select="/tree/son" and then
> >> output the "value" node and "position()" under the "first" node but
would
> > I
> >> have to write a
> >> "xsl:for-each" again only output it for the "second" node or there's
some
> >> way of outputing the same value, lets say "position()", under different
> >> output nodes?
> >>
> >> Thank you
> >> Liron

Current Thread