[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] SET-INTERSECTION function/template for sequences


Subject: [xsl] SET-INTERSECTION function/template for sequences
From: mark bordelon <markcbordelon@xxxxxxxxx>
Date: Sat, 4 Jul 2009 09:53:25 -0700 (PDT)

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
 
 


Current Thread
Keywords