xsl-list
[Top] [All Lists]

Re: Outputing the same value-of for different nodes

2006-02-22 09:39:31
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(_at_)netvision(_dot_)net(_dot_)il>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--