RE: [xsl] matching on multiple attributes contained in a node-set

Subject: RE: [xsl] matching on multiple attributes contained in a node-set
From: Carl Yu <carl.yu@xxxxxxxxxxxx>
Date: Fri, 28 Mar 2003 09:16:55 -0800 (PST)
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=@grade and 
$s/type/@value=@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.&#xA;</xsl:text>
      </xsl:when>
      <xsl:otherwise>
         <xsl:text> is not in the list.&#xA;</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@xxxxxxxxxxxxxxxxxxxxxx
>Cc: Jarno.Elovirta@xxxxxxxxx
>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.&#xA;</xsl:text>
>        </xsl:when>
>        <xsl:otherwise>
>         <xsl:value-of select="$s/name/@value" />
>         <xsl:text> is not in the list.&#xA;</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


Current Thread