xsl-list
[Top] [All Lists]

RE: node-set() confusion

2004-10-16 15:38:54
xsl:for-each changes the context node, in this case to a node in the result
tree fragment. Path expressions starting with "/" always select nodes within
the tree containing the context node. If you want to select nodes in the
original source tree, create a global variable:

<xsl:variable name="root" select="/"/>

and then select relative to that, e.g. $root/root/foo/bar 

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Alexander Macdonald [mailto:lists(_at_)alexmac(_dot_)cc] 
Sent: 16 October 2004 23:54
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] node-set() confusion

I originally posted this question in the xalan-j-users mailinglist 
thinking it was a bug in Xalan but after getting the same result with 
the saxon xslt processor I'm not too sure...

I'm having problems when using the exslt:node-set() function as well. 
I'm not sure if it's related or if I've just missed something 
basic but 
I'll explain it anyway:

*** here is my xml document:

<root>
     <foo>
         <bar id="1"/>
         <bar id="2"/>
         <bar id="3"/>
     </foo>
</root>




*** and here is my xslt script:

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
     xmlns:exslt="http://exslt.org/common";>

     <xsl:output method="html"/>

     <xsl:template match="/">
         <xsl:message>correct: <xsl:for-each 
select="/root/foo/bar">found! </xsl:for-each></xsl:message>

         <xsl:variable name="result-tree-fragment">
             <xsl:for-each select="/root/foo/bar">
                     <bar id="{(_at_)id}"/>
             </xsl:for-each>
         </xsl:variable>

         <xsl:for-each select="/root/foo">
                 <xsl:message>still correct: <xsl:for-each 
select="/root/foo/bar">found! </xsl:for-each></xsl:message>
         </xsl:for-each>

         <xsl:for-each 
select="exslt:node-set($result-tree-fragment)/bar">
                 <xsl:message>broken: <xsl:for-each 
select="/root/foo/bar">found!</xsl:for-each></xsl:message>
         </xsl:for-each>
     </xsl:template>

</xsl:stylesheet>




when parsed by xalan the output looks like this:

file:/home/test.xsl; Line #10; Column #-1; correct: found! 
found! found!
file:/home/test.xsl; Line #19; Column #-1; still correct: 
found! found! 
found!
file:/home/test.xsl; Line #23; Column #-1; broken:
file:/home/test.xsl; Line #23; Column #-1; broken:
file:/home/test.xsl; Line #23; Column #-1; broken:


I expected it to look like this:

file:/home/test.xsl; Line #10; Column #-1; correct: found! 
found! found!
file:/home/test.xsl; Line #19; Column #-1; still correct: 
found! found! 
found!
file:/home/test.xsl; Line #23; Column #-1; broken: found! 
found! found!
file:/home/test.xsl; Line #23; Column #-1; broken: found! 
found! found!
file:/home/test.xsl; Line #23; Column #-1; broken: found! 
found! found!


can anybody help?

--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--





<Prev in Thread] Current Thread [Next in Thread>