xsl-list
[Top] [All Lists]

Re: Nodes and Strings

2005-07-26 01:04:24
I have two sets that I need to compare but the values aren't the same.
Example:

<setA>
    <element>value1</element>
    <element>value2</element>
    <element>value3</element>
    <element>value4</element>
    <element>value5</element>
</setA>

<setB>
    <element>aStringBeforeValue.value1</element>
    <element>aStringBeforeValue.value2</element>
    <element>aStringBeforeValue.value3</element>
</setB>

expected result (for intersection between the sets):

<setC>
    <element>value1</element>
    <element>value2</element>
    <element>value3</element>
</setC>

I want to get the intersection (difference, whatever) between two sets
that haven't the same string values for their elements... (I didn't
found a function like substring, for example, that receives as
parameter
a node list... only for strings... So, I'm resolving this problem with
a
little bit long and confused code.)
Is it possible?

Here's a potential XSLT 2.0 solution:

<xsl:template match="/">
  <setC>
      <xsl:copy-of select="for $a in //setA/element return
                                    for $b in //setB/element return
                                     if (contains($b, $a)) then $a else ''"/>
  </setC>
</xsl:template>

I think there is probably a better one, one which doesn't involve the
if then else, and which won't produce duplicates (if that is the
requirement).

A 1.0 solution would be a pair of nested for-each's which check each
element in set A against each element in set B - the same as above but
in long hand really.

cheers
andrew

--~------------------------------------------------------------------
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>
--~--