Jarno,
Thanks to your re-organization of my implemtation I was able to discern a
solution that works. Here's what I ended up doing.
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="xalan"
version="1.0">
<xsl:output method="text"/>
<xsl:variable name="list">
<item grade="1" type="math"/>
<item grade="2" type="science"/>
</xsl:variable>
<xsl:template match="/dftml">
<xsl:apply-templates select="student"/>
</xsl:template>
<xsl:template match="/dftml/student">
<xsl:variable name="s" select="." />
<xsl:variable name="validList">
<xsl:for-each
select="xalan:nodeset($list)/item[$s/grade/@value=(_at_)grade and
$s/type/@value=(_at_)type]">
<xsl:copy-of select="$s" />
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="name/@value"/>
<xsl:choose>
<xsl:when test="xalan:nodeset($validList)/node()">
<xsl:text> is in the list.
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> is not in the list.
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform>
[output]
bob is not in the list.
joe is not in the list.
peter is not in the list.
larry is in the list.
Date: Fri, 28 Mar 2003 08:37:49 -0800 (PST)
From: Carl Yu <yuc>
Subject: RE: [xsl] matching on multiple attributes contained in a node-set
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Cc: Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com
Mime-Version: 1.0
Content-MD5: JHl6yh4PccBV0c1QU+vX0A==
Thanks for cleaning up my implementation, but -- unfortunately, I'm looking
something that outputs 1 line for each and every student, not just the ones in
the list. I've altered your implementation to do this... but it suffers from
the same problem as my initial implementation.
[modified xsl]
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="xalan"
version="1.0">
<xsl:output method="text"/>
<xsl:variable name="list">
<item grade="1" type="math"/>
<item grade="2" type="science"/>
</xsl:variable>
<xsl:template match="dftml">
<xsl:for-each select="student">
<xsl:variable name="s" select="." />
<xsl:for-each select="xalan:nodeset($list)/item">
<xsl:choose>
<xsl:when test="$s/grade/@value = @grade and $s/type/@value = @type">
<xsl:value-of select="$s/name/@value" />
<xsl:text> is in the list.
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$s/name/@value" />
<xsl:text> is not in the list.
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:transform>
[output]
bob is not in the list.
bob is not in the list.
joe is not in the list.
joe is not in the list.
peter is not in the list.
peter is not in the list.
larry is in the list.
larry is not in the list.
[desired output]
bob is not in the list.
joe is not in the list.
peter is not in the list.
larry is in the list.
Thanks,
Carl
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list