Subject: RE: [xsl] xsl:call-template problem From: cknell@xxxxxxxxxx Date: Tue, 22 Aug 2006 16:58:59 -0400 |
If I understand your requirement, you wish to process each <stream_definition> with two different templates. The usual way to do this is by using a "mode" attribute on the templates and in the <apply-template> opening tag. So here you want two templates: <xsl:template match="stream_definition" mode="alpha"> ... Your stuff goes here ... </xsl:template> <xsl:template match="stream_definition" mode="beta"> ... Your other stuff goes here ... </xsl:template> Then you do either: <xsl:apply-templates select="stream_definition" mode="alpha" /> <xsl:apply-templates select="stream_definition" mode="beta" /> Of course, what value you assign to the various "mode" attributes is up to you. I used "alpha" and "beta", you may want to use "cat" and "dog", or any other XML-legal values. -- Charles Knell cknell@xxxxxxxxxx - email -----Original Message----- From: Lin, Jessica <jlin@xxxxxxxxxxx> Sent: Tue, 22 Aug 2006 11:55:58 -0700 To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Subject: [xsl] xsl:call-template problem 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] Email Address Validation, James Fuller | Thread | RE: [xsl] xsl:call-template problem, Lin, Jessica |
RE: [xsl] Using attributes with XPa, Michael Kay | Date | RE: [xsl] xsl:call-template problem, Lin, Jessica |
Month |