This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Possible MSXML 3 / 4 bug: using a for-each on xsl:variable / tree-frag is misbehaving
- From: Jeff Beadle <Jbeadle at manh dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Tue, 14 May 2002 09:34:50 -0400
- Subject: [xsl] Possible MSXML 3 / 4 bug: using a for-each on xsl:variable / tree-frag is misbehaving
- Reply-to: xsl-list at lists dot mulberrytech dot com
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