Re: [xsl] Tricky inclusion match

Subject: Re: [xsl] Tricky inclusion match
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Tue, 29 Mar 2005 08:26:15 -0800 (PST)
Following is a XSLT 2.0 solution..

<?xml version="1.0"?> 
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0">
 
<xsl:output method="text" />  
 
<xsl:template match="/data">
  <xsl:variable name="temp1" select="colors/color" /> 
  
  <xsl:for-each select="pictures/picture">
    <xsl:variable name="temp2"
select="distinct-values(color)" />    
    <xsl:if
test="count(distinct-values($temp1[.=$temp2])) &gt;
1">
      picture sample #<xsl:value-of select="@sample"
/><xsl:text>&#xa;</xsl:text>
    </xsl:if>
  </xsl:for-each>
</xsl:template>
 
</xsl:stylesheet>

The expression distinct-values($temp1[.=$temp2]) finds
the intersection of sequences $temp1 and $temp2.

XSLT processor used: Saxon 8.3 ..

Regards,
Mukul

--- Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> Okay,
> Lets say you have a set of colors and you have a
> whole bunch of
> pictures and you want to match on all pictures who
> have one or more of
> the given colors but you have to at least match on 2
> of them (unique,
> so not red and red - so a picture could list red
> twice but that would
> not be a match).  I'm trying to use keys and
> grouping to solve this
> but thinking that I might be making this more
> difficult.  At any rate,
> I'm stuck and would appreciate some help : )
> 
> Sample Data (expected results below):
> 
> <data>
>     <colors>
>     	<color>red</color>
>     	<color>blue</color>
>     	<color>fucia</color>
>     	<color>violet</color>
>     </colors>
>     <pictures>
>     	<picture sample="1">
>         	<color>black</color>
>         	<color>grey</color>
>         	<color>white</color>
>         </picture>
>     	<picture sample="2">
>         	<color>red</color>
>         	<color>green</color>
>         	<color>brown</color>
>         	<color>blue</color>
>         </picture>
>     	<picture sample="3">
>         	<color>purple</color>
>         	<color>orange</color>
>         </picture>
>     	<picture sample="4">
>         	<color>blue</color>
>         	<color>green</color>
>         	<color>red</color>
>         </picture>
>     	<picture sample="5">
>         	<color>fucia</color>
>         	<color>green</color>
>         	<color>violet</color>
>         </picture>
>     	<picture sample="6">
>         	<color>red</color>
>         	<color>brown</color>
>         	<color>red</color>
>         </picture>
>     </pictures>
> </data>
> 
> Expected Results (picture matches based on 2 or more
> colors used and
> listed in colors above)
> 
> picture sample #2
> picture sample #4
> picture sample #5
> 
> 


		
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/ 

Current Thread