Re: [xsl] How do I do this?

Subject: Re: [xsl] How do I do this?
From: Mike Brown <mike@xxxxxxxx>
Date: Wed, 21 Aug 2002 13:59:30 -0600 (MDT)
SoumenS@xxxxxxxxx wrote:
> I have a XML based message specification as follows
> 
> <message-text><param/> xxxxx yyyy <param/> zzzz bbbb <param/>
> hhhh<param/></message-text>
> 
> I would like to convert it to
> 
> <file-text>{0} xxxxx yyyy {1} zzzz bbbb {2} hhhh{3}<file-text>
> 
> I need to be within the for loop of param and text(), i.e.,
> 
> <xsl:for-each select='param | text()'>
> 
> Within this for loop how do I get the param number -- position() would not
> work.

Like this:  count(preceding-sibling::param)

If I were you, I would not use a for-each, because it results in the same
template (the content of the for-each) being applied to both text nodes and
param elements. I would do this instead:

<xsl:template match="message-text">
  <file-text>
    <xsl:apply-templates/>
  </file-text>
</xsl:template>

<xsl:template match="param">
  <xsl:value-of select="concat('{',count(preceding-sibling::param),'}')"/>
</xsl:template>

letting the built-in template for text nodes take care of the character data.

   - Mike
____________________________________________________________________________
  mike j. brown                   |  xml/xslt: http://skew.org/xml/
  denver/boulder, colorado, usa   |  resume: http://skew.org/~mike/resume/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread