[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

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

Subject: Re: Using contains with more than one string - XSLT2.0
From: "David Sewell dsewell@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 Jan 2015 20:35:35 -0000
Re:  Using contains with more than one string - XSLT2.0
If you're using XSLT 2, the function you want is matches() rather than contains(). That allows you to use regular-expression syntax to express a choice of strings to match. In this case you want

<xsl:for-each select="//dsc//unittitle[matches(normalize-space(.),'Photo|Neg')]

or you can put the regular expression in your $target variable, so that simply replacing "contains" with "matches" in your code below will work.

matches() is a lot more powerful than contains() because of its support for regular expressions and case insensitivity (among other things).

David S.

On Wed, 28 Jan 2015, Michele R Combs mrrothen@xxxxxxx 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.


Michele Combs
Lead Archivist
Special Collections Research Center
Syracuse University Libraries

-- David Sewell, Editorial and Technical Manager ROTUNDA, The University of Virginia Press PO Box 400314, Charlottesville, VA 22904-4314 USA Email: dsewell@xxxxxxxxxxxx Tel: +1 434 924 9973 Web: http://rotunda.upress.virginia.edu/

Current Thread


Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
First Name
Last Name
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.