tags:

views:

19

answers:

2
+2  Q: 

XSLT 1.1 nodeset

I have this...

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

  <xsl:variable name="data">
    <root>
      <test>1000</test>
      <test>2000</test>
      <test>3000</test>
     </root>
   </xsl:variable>   

   <xsl:template match="/">
     <xsl:for-each select="$data/root/test">
        <xsl:for-each select="."/>
     </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

And I thought that with XSLT 1.1 that the $data variable would be treated as a node-set and that therefore standard XSLT stuff - like for-each - should work.

I don't get an error, but I get no output - it's as though the $data nodeset is completely empty.

I've also tried this

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

      <xsl:variable name="data">
        <root>
          <test>1000</test>
          <test>2000</test>
          <test>3000</test>
         </root>
       </xsl:variable>   

       <xsl:template match="/">
         <xsl:for-each select="exslt:node-set($data)/root/test">
            <xsl:for-each select="."/>
         </xsl:for-each>
       </xsl:template>

</xsl:stylesheet>

With the same results. (Infact, I've done this before with no problems) I'm using Saxon.

What am I missing? (I'm not in a position to use XSLT 2.0 by the way)

Thanks

+1  A: 

You wrote:

I don't get an error, but I get no output

The problem is here:

<xsl:for-each select="."/> 

Your question:

What am I missing?

Answer: You are missing your template.

Alejandro
A: 
<xsl:template match="/"> 
  <xsl:for-each select="exslt:node-set($data)/root/test">

     <xsl:for-each select="."/> 
  </xsl:for-each>     </xsl:template>

The error is in the following (empty) instruction:

    <xsl:for-each select="."/> 

This (probably) has to be:

<xsl:value-of select="."/>

or

<xsl:copy-of select="."/>

or ... ?

Dimitre Novatchev