[xsl] for-each -- strange multiplication effects

Subject: [xsl] for-each -- strange multiplication effects
From: mario.jeckle@xxxxxxxxxxxxxxxxxxx
Date: Tue, 16 Jan 2001 14:12:43 +0100
Hello,

discovered some strange effect using for-each.
When the predicate is true for one element that matches the node set (say 
"//x") specified by the select attribute of for-each it it repeated count(//x) 
times even when the predicate is false.

Stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" encoding="UTF-8"/>

<xsl:template match="test">
	<xsl:for-each select="//test[@x]">
		this should only happen once!
		<xsl:value-of select="@x"/>
	</xsl:for-each>
</xsl:template>
</xsl:transform>

Input:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
	<test/>
	<test x="42"/>
	<test y="99"/>
	<test/>
</doc>

Output:
<?xml version="1.0" encoding="UTF-8"?>
this should only happen once!
42
this should only happen once!
42
this should only happen once!
42
this should only happen once!
42

Am I misinterpreting XPaths node set expression here?
IMHO the body of for-each should only be executed for all nodes which adhere to 
the specified select pattern including its predicate.

Mario

-----------------------
Mario Jeckle
mario.jeckle@xxxxxxxxxxxxxxxxxxx
DaimlerChrysler Corporate Research
DaimlerChrysler Forschungszentrum Ulm

URL: http://www.jeckle.de
XML Resource Center: 
-----------------------

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


Current Thread