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:39:31 -0600
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