[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] xsl:call-template problem


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 &lt; 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
Keywords