RE: [xsl] org.apache.xpath.objects.XRTreeFrag error

Subject: RE: [xsl] org.apache.xpath.objects.XRTreeFrag error
From: "Aron Bock" <aronbock@xxxxxxxxxxx>
Date: Fri, 06 May 2005 14:03:26 +0000
Thorsten,

Whenever you do something like:

<xsl:variable>
 .. something other than a scalar value
</xsl:variable>

You end up with a "tree fragment", as you've found. Such fragments need to be converted to a nodeset, which extension function is offered by various processors. "node-set", by the MSXML processor, "nodeset" by xalan, etc. You should be able to find examples on the net.

As far as possible, however, try not to create a tree fragment (in XSLT 1.0); it makes life easier. In Your case you could define your variable as:

<xsl:variable name="objectProperty" select="..."/>

and you'd get back a node-set that could be simply traversed further downstream.

Regards,

--A


From: Thorsten Scherler <thorsten@xxxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] org.apache.xpath.objects.XRTreeFrag error
Date: Fri, 06 May 2005 14:32:14 +0200

Hi list,

I am trying to process the following code:

I defined a variable like:
<xsl:variable name="objectProperty">
 <xsl:copy-of select="$model[@objectId=
$objectId]/forrest:property[@name=$name]"/>
</xsl:variable>

This variable $objectProperty is a frag like this:
      <forrest:property newId="221" name="mq1-preis">
        <euro>85</euro>
        <cent>00</cent>
      </forrest:property>

Then I call another template with this frag:
<xsl:call-template name="getText">
  <xsl:with-param name="setX">
   <xsl:copy-of select="$objectProperty"/>
  </xsl:with-param>
</xsl:call-template>

In the final template I have
<xsl:template name="getText">
  <xsl:param name="setX"><test>This is a test.</test></xsl:param>
...
  <xsl:copy-of select="$setX"/>
...
</xsl:template>

That is working fine because it will output:
      <forrest:property newId="221" name="mq1-preis">
        <euro>85</euro>
        <cent>00</cent>
      </forrest:property>

...but as soon I as I change the final template and use
<xsl:value-of select="$setX/euro"/> or
<xsl:copy-of select="$setX/euro"/>

I get
javax.xml.transform.TransformerException: java.lang.ClassCastException:
org.apache.xpath.objects.XRTreeFrag

Can anybody tell me what is going wrong and why the XPath is not
working?

TIA

salu2
--
thorsten

"Together we stand, divided we fall!"
Hey you (Pink Floyd)


_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today - it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/


Current Thread