This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Possible MSXML 3 / 4 bug: using a for-each on xsl:variable / tree-frag is misbehaving


Howdy all,

I looked through the archives and went to Microsoft's msxml site and
couldn't find any "PRB" or "BUG" reports regarding this "issue".

Here's what I'm seeing:  Within an xsl:for-each element, where the select is
made against an xsl:variable tree-frag, xpath statements are failing to
nodes outside of the given for-each's context.


Here's the xml:

<?xml version="1.0"?>
<xml>
<an-element>
   <child id="child01"/>
   <child id="child02"/>
</an-element>
<collection>
   <item id="item01"/>
   <item id="item02"/>
</collection>
</xml>


Here's the xslt:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" exclude-result-prefixes="msxsl"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output method="xml" indent="yes" encoding="utf-8"/>
   <xsl:template match="/">
      <output>
         <xsl:variable name="items" >
            <xsl:copy-of select="//item"/>
         </xsl:variable>
         <xsl:for-each select="msxsl:node-set($items)/item">
            <using_msxsl_node-set child-id="{@id}">
               <xsl:copy-of select="/xml/an-element"/>
            </using_msxsl_node-set>
         </xsl:for-each>
         <xsl:for-each select="//item">
            <NOT_using_msxsl_node-set child-id="{@id}">
               <xsl:copy-of select="/xml/an-element"/>
            </NOT_using_msxsl_node-set>
         </xsl:for-each>
      </output>
   </xsl:template>
</xsl:stylesheet>


Here's the output (I get):

<?xml version="1.0" encoding="utf-8" ?>
<output>
   <using_msxsl_node-set child-id="item01" />
   <using_msxsl_node-set child-id="item02" />
   <NOT_using_msxsl_node-set child-id="item01">
      <an-element>
         <child id="child01" />
         <child id="child02" />
      </an-element>
   </NOT_using_msxsl_node-set>
   <NOT_using_msxsl_node-set child-id="item02">
      <an-element>
         <child id="child01" />
         <child id="child02" />
      </an-element>
   </NOT_using_msxsl_node-set>
</output>


If this is not a user error/bug and truly is a bug within msxml, then this
one really sucks.


I can think of workarounds but they're a major pain in the you-know-what.

... oh, and for those will immediately ask:  "Can you re-design the code not
to use a variable?"  Nope, I can't ...  well, I'm pretty sure I can't.
Within the real code, I have to build and work with temporary
objects/results.


So, has anyone encountered this "issue"?


Thanks,
Jeff






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]