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

Re: [xsl] How to retrieve value(which is copied into RTF as a variable) from RTF


Subject: Re: [xsl] How to retrieve value(which is copied into RTF as a variable) from RTF
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 4 Jan 2005 13:41:34 GMT

   I have a RTF with following declaration
   <xsl:variable name="professionLevel"> 
       <xsl:for-each select="//profession">
         <xsl:variable name="nameval" select="@name"/>
         <xsl:variable name="parentval" select="@parent"/>
         <xsl:for-each
                            select="exslt:node-set($leverreference)/*">
           <xsl:variable name="referid" select="@levelref"/>
           <xsl:if test="$referid=$parentval">
             <xsl:copy>
               <xsl:copy-of select="$nameval"/>
             </xsl:copy>
           </xsl:if>
         </xsl:for-each>
       </xsl:for-each>
   </xsl:variable>
   

That looks a very strange definition. The select expression on your
inner fo-each doesn't depend on the current node so you will iterate
over all of $leverreference)/* repeatedly, as many times as you have 
profession elements in your original source, is that really what you
want?

The above is euivalent to

   <xsl:variable name="professionLevel"> 
       <xsl:for-each select="//profession">
         <xsl:variable name="nameval" select="@name"/>
         <xsl:variable name="parentval" select="@parent"/>
         <xsl:for-each
                            select="exslt:node-set($leverreference)/*[@levelref=$parentval]">
             <xsl:copy>
               <xsl:copy-of select="$nameval"/>
             </xsl:copy>
         </xsl:for-each>
       </xsl:for-each>
   </xsl:variable>
   

Note that although the variable is called nameval it does not store an
attribute value, but the attribute node so
    <xsl:copy>
               <xsl:copy-of select="$nameval"/>
    </xsl:copy>

generates an empty element )with name the same as the element in
$leverreference) with a name attribute.

So

<xsl:for-each
select="exslt:node-set($professionLevel)/*">
		<xsl:value-of select="."/>
	</xsl:for-each> 

will select a set of empty elements, <xsl:value-of select="."/> on each
of them will be the empty string.

You need to use <xsl:value-of select="@name"/> here in order to get any
output, but that will just concatemate all the values, so probably you
will need to add spaces or commas in between.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________


Current Thread