xsl-list
[Top] [All Lists]

[xsl] SET-INTERSECTION function/template for sequences

2009-07-04 12:53:57

Dear XML Ladies and Gentlemen,

I am trying to implement in XSL a *set-intersection* "function" in the form of 
a template. It should accepts two sequence parameters and return a sequence 
parameter. The application for this function will be to argument values that 
contain space delimited lists like this:

XML:
<skill category="database software">oracle pl-sql package functions and stored 
procedures</skill>

XSL: (test "database software" for any match in "database sysadm")
<xsl:template match="
  exists(
    setintersect( 
      tokenize(skill/@category,' '), 
      tokenize('database sysadm',' ')
    ) 
  )
">

I have tried to implement the setintersect as a for loop to build a variable 
containing the matches, but cannot seem to get this variable to "build" up in 
the loop.
I have also tried to adapt this node-based set:intersection found through a 
google search, but I cannot figure out how it is working, and would like a 
simpler, one-template approach anyway.

<xsl:template name="set:intersection">
  <xsl:param name="nodes1" select="/.." /> 
  <xsl:param name="nodes2" select="/.." /> 
  <xsl:apply-templates select="$nodes1[count(.|$nodes2) = count($nodes2)]" 
mode="set:intersection" /> 
</xsl:template>
<xsl:template match="node()|@*" mode="set:intersection">
  <xsl:copy-of select="." /> 
</xsl:template>
 
Can someone give me some help? Perhaps I am going about this all wrong and 
there is another, simpler, more elegant way?

Thanks,
Mark Bordelon
Getty Trust
 
 




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--