| Subject: [xsl] xsl:call-template problem From: "Lin, Jessica" <jlin@xxxxxxxxxxx> Date: Tue, 22 Aug 2006 11:55:58 -0700 | 
Here is the block of xml file. I want to repeat stream twice in
stream_loop and change the SCID to PID with differenct start number by
using xsl:call-template.
  <stream_loop>
    <stream_definition>
      <stream_type>2</stream_type>
      <SCID>100</SCID>
      <descriptors_loop_length>compute</descriptors_loop_length>
      <descriptor_loop>
        <about_descriptor>some description</about_descriptor>
        <additional_descriptor>other description</additional_descriptor>
      </descriptor_loop>
    </stream_definition>
  </stream_loop>
Here is the expected result:
 <stream_loop>
    <stream>
      <stream_type>2</stream_type>
      <PID>4112</SCID>
      <ECM>4113</ECM>
      <descriptors_loop_length>compute</descriptors_loop_length>
      <descriptor_loop>
        <about_descriptor>some description</about_descriptor>
        <additional_descriptor>other description</additional_descriptor>
      </descriptor_loop>
    </stream>
    <stream>
      <stream_type>2</stream_type>
      <PID>4114</SCID>
      <ECM>4115</ECM>
      <descriptors_loop_length>compute</descriptors_loop_length>
      <descriptor_loop>
        <about_descriptor>some description</about_descriptor>
        <additional_descriptor>other description</additional_descriptor>
      </descriptor_loop>
    </stream>
  </stream_loop>
Here is my xslt block:
<xsl:template name="repeat twice">
  <xsl:param name="base" select="4112"/>
  <xsl:param name="start" select="0"/>
  <xsl:choose>
    <xsl:when test="$start < 2">
      <stream>
	<xsl:for-each select="node()">
	  <xsl:choose>
	    <xsl:when test="local-name(.)='SCID'">
	      <PID>
<xsl:value-of select="$base"/>
	      </PID>
              <ECM>
                <xsl:value-of select="$base+1"/>
	      </ECM>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:copy-of select="."/>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:for-each>
      </stream>
      <xsl:call-template name="calculate">
	<xsl:with-param name="base" select="$base+$start*2" />
	<xsl:with-param name="start" select="$start+1"/>
      </xsl:call-template>
    </xsl:when>
  </xsl:choose>
</xsl:template>
But the real result is not as what I am expecting. Can anyone tell me
what's wrong in my xslt block? Thank a lot.
--- Jessica
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] change element to sibling, Mukul Gandhi | Thread | [xsl] Transform xml without copying, Nishi Bhonsle | 
| [xsl] An XSL strategy for mixing re, Dan Vint | Date | [xsl] Using attributes with XPath, Jacqueline Radebaugh | 
| Month |