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

Subject: Re: [xsl] Outputing the same value-of for different nodes
From: "Liron" <magilam@xxxxxxxxxxxxxxxx>
Date: Wed, 22 Feb 2006 17:47:34 +0100
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