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

Re: [xsl] Using contains with more than one string - XSLT2.0


Subject: Re: [xsl] Using contains with more than one string - XSLT2.0
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 Jan 2015 20:52:44 -0000

Either use matches() as David Sewell suggests, or construct an expression
along the lines

contains(., 'abc') or contains(., 'xyz') or contains(., 'pqr')

But are you sure you actually want contains()? People often misuse it,
thinking it means "Node N contains value V". For that, you want an "equals"
test.

Michael Kay
Saxonica
mike@xxxxxxxxxxxx
+44 (0) 118 946 5893




On 28 Jan 2015, at 20:22, Michele R Combs mrrothen@xxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> I've done some googling on this but nothing seems quite to match what I want
to do.
>
> At the top of my style sheet I have this:
>
>   <xsl:variable name="target" select="'Photo'"/>
>
> Then later I do this to find all titles with that string in them:
>
>   <xsl:for-each
select="//dsc//unittitle[contains(normalize-space(.),$target)]">
>
> So far so good, works great.  The problem comes when I want to tell the
contains function to match on any one of several strings, e.g. Photo or Neg or
Film.  So far I have tried the following but none of them work:
>
>   <xsl:variable name="target" select="'Photo|Neg'"/>
>   <xsl:variable name="target" select="'Photo'|'Neg'"/>
>   <xsl:variable name="target" select="'Photo' or 'Neg'"/>
>   <xsl:variable name="target" select="'Photo Neg'"/>
>
> If I must, I can stick the or'ed terms directly in the contains function
rather than using a variable, but when I tried a few variations on that, they
didn't work either.
>
> Thanks
>
> Michele
> +++++++++++++++
> Michele Combs
> Lead Archivist
> Special Collections Research Center
> Syracuse University Libraries
> 315-443-2081
> mrrothen@xxxxxxx
> scrc.syr.edu


Current Thread