RE: [xsl] concat all items in a sequence

Subject: RE: [xsl] concat all items in a sequence
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 30 Aug 2005 15:34:18 +0100
> I'm using the following:
> 
> contains(elem, val)
> 
> It's possible that 'elem' can be a sequence of more than one item.
> 
> The way I've code around this is to use string-join with an empty
> string as one of the arguments:
> 
> contains(string-join(for $i in elem return $i, ''), val)
> 
> Is there a better way?

1. The expression 

     for $i in elem return $i

   can be rewritten as
 
     elem

   So you get 

     contains(string-join(elem, ''), val)

2. Do you want to match substrings that cross item boundaries, e.g. do you
want contains(('red', 'green'), 'edgr') to be true? If so, I don't think you
can do better than the above. If you don't want this, then apply contains to
each string in the sequence separately:

   exists(elem[contains(., val)])

Michael Kay
http://www.saxonica.com/

Current Thread