Re: odd NodeSet behavior

Michael Ludwig <[email protected]>
Newsgroups gmane.text.xml.xalan.java.user
Message-ID <20090420224417.GH2160@wladimir>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.