I have a simple document:
  <?xml version="1.0" encoding="UTF-8"?>
  <root>
    <name>Test</name>
    <description>D1</description>
    <number>42</number>
    <description>D2</description>
  </root>

And a stylesheet that groups certain elements together:
  <?xml version="1.0"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
                  xmlns:exslt="http://exslt.org/common"; 
                  extension-element-prefixes="exslt" 
                  exclude-result-prefixes="exslt" 
                  version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:variable name="tree">
      <test>name</test>
      <test>description</test>
    </xsl:variable>
    <xsl:template match="root">
      <out>
        <!-- process the specific nodes defined in the variable -->
        <xsl:for-each select="exslt:node-set($tree)/test">
          <xsl:variable name="tag" select="."/>
          <results group="{$tag}">
            <xsl:for-each select="/root/*[name() = $tag]">
              <xsl:copy-of select="."/>
           </xsl:for-each>
        </results>
      </xsl:for-each>
    </out>
  </xsl:template>
</xsl:stylesheet>

The expected output is:
<?xml version="1.0"?>
<out>
  <results group="name">
    <name>Test</name>
  </results>
  <results group="description">
    <description>D1</description>
    <description>D2</description>
  </results>
</out>

In the case of Xalan (v2.4.1 with JDK1.4.1) the output is: 
<?xml version="1.0" encoding="UTF-8"?>
<out>
  <results group="name"/>
  <results group="description"/>
</out>

I ran the same stylesheet with XSLTProc and got the output I expected. It is
as though the Xalan processor cannot see the root element when it is
operating within a for-each clause walking a converted nodeset. Does anyone
know if this is a know fault or is it behaving according to spec and my
expectations were wrong. Obviously there are better ways of grouping things
and I have changed the whole stylesheet but suspect I have found a problem.

Pete Edwards

Reply via email to