RE: [xsl] XPATH: Can not convert #STRING to a NodeList!

Subject: RE: [xsl] XPATH: Can not convert #STRING to a NodeList!
From: "Palaniappan, Krishnasamy" <PalaniK@xxxxxxxxxxx>
Date: Fri, 22 Dec 2000 10:09:47 -0500
Thanks, Jeni! However, still having some problems.
When i replaced:
    <xsl:value-of select="$b_level_total"/>
by:
  <xsl:value-of select="*[local-name() = $b_level_total]" />
- it resulted in the statement returning (or assigning) nothing. 

When i changed that to:
  <xsl:value-of select="*[local-name($b_level_total)]" /> - Statement 3
- something weird happened. 
	<BREAK2>
  	 <VAR1> value1 </VAR2>
       <B2TOTAL>
	   <VAR2> value2 </VAR2>
	 </B2TOTAL>
	</BREAK2>

If i called the template from:
	<xsl:for-each select="BREAK2">
		<xsl:call-template name="..">
		 <xsl:with-param select="B2TOTAL"/>
		</xsl:call-template>
	</xsl:for-each>
then, Statement 3 (see above) displays "value1" (which is the value of B2TOTAL's sibling VAR1).

Do you see what is going on here?!
Please let me know if I am missing something or doing something wrong.

Thanks,
Krish
p.s.: I have subscribed to the digest.

-----Original Message-----
From: Jeni Tennison [mailto:mail@xxxxxxxxxxxxxxxx]
Sent: Friday, December 22, 2000 5:24 AM
To: Palaniappan, Krishnasamy
Cc: 'xslt'
Subject: Re: [xsl] XPATH: Can not convert #STRING to a NodeList!


Krish,

> I call this template using:
>         <xsl:call-template name="values_SUST">
>                       <xsl:with-param name="b_level_total" select="'B4TOTAL'"/>
>                        <xsl:with-param name="category" select="'TDES'"/>
>                        <xsl:with-param name="bcolor" select="'black'"/> 
>             </xsl:call-template>
>
> what I desire is:
> The template values_SUST needs to be called with 3 string arguments
> ("B4TOTAL","TDES","black"). While "black" should become the color in
> the template, B4TOTAL and TDES are actually nodes. Can I not do
> this?

In answer to your subject's question: you cannot convert strings to
node lists unless you use an extension function like saxon:evaluate.
However, you can select elements that have the same name as the
string.  For example:

  <xsl:value-of select="*[local-name() = $b_level_total]" />

One problem that you might be experiencing is that you seem to be
testing whether the value of $category is equal to the *value* of TDES,
SUB-TOTAL and TOTAL elements, whereas I think you want to test whether
it's equal to the strings 'TDES', 'SUB-TOTAL' or 'TOTAL', i.e.:

     <xsl:choose>
      <xsl:when test="$category='TDES'">
       <xsl:value-of select="TDES"/>
      </xsl:when>
      <xsl:when test="$category='SUB-TOTAL'">
       SUB-TOTAL
      </xsl:when>
      <xsl:when test="$category='TOTAL'">
       TOTAL
      </xsl:when>
     </xsl:choose>

Also, where you're inserting the colour that you're passing as a
parameter, remember that you need to use attribute value templates to
put the value of the parameter into the value of the attribute, i.e.:
     
    <fo:block font-size="6pt" color="{$bcolor}" text-align="center">
     <xsl:value-of select="*[local-name() = $b_level_total]/CNT"/>
    </fo:block>

I hope that helps,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Current Thread