Adam Jenkins schrieb am 20.04.2009 um 14:46:55 (-0700):
> 
> I have notice some really odd behavior when using
> org.apache.xpath.NodeSet.

> Then, when I had to collect a range of different nodes to work with
> (kind of like a preprocessing step) I created one directly and added
> nodes to it.  They added correctly, however I can no longer use
> xsl:for-each.

> <xsl:variable name="nodebucket"
> select="java:org.apache.xpath.NodeSet.new()"/>

Hi Adam,

this is an interesting case. At this point, the variable is bound and
should never change as far as XSLT is concerned. (Remember, variables
aren't.)

> <!--
>    next I have a range of apply-templates that pass the variable
>    nodebucket as a parameter, that performs the following at various
>    places
> 
>    <xsl:variable name="tmp" select="java:addNode($nodebucket, .)"/>

You're submitting data that is supposed to be immutable to a series of
changes. Looks suspicious to me.

>   this works fine, as is indicated by the logging statement below
> -->
> 
> <log:debug message="number of nodes to process {java:size($nodebucket)
> + 1}"/> <!--this prints out the correct value of 33 -->

Really? Surprising. But then, it's a bizarre case.

> <xsl:for-each select="$nodebucket">
>    <!--this never executes! -->

And it shouldn't - this *is* an empty node-set!

My theory: The XSLT variable is frozen for the purpose of XSLT
processing, but the underlying data structure continues to be subject
to (undue) manipulation by Java. A case for the experts to comment!

You could also consider posting a small but complete test case that
exposes the problem while being easy to understand.

Best,

Michael Ludwig

Reply via email to