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

Re: [xsl] question on filtering a one-to-many relationship


Subject: Re: [xsl] question on filtering a one-to-many relationship
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Tue, 06 Mar 2012 09:47:48 +0000

On 06/03/2012 09:30, Robby Pelssers wrote:
Hi all,

Just to make my use case clear I quickly came up with a simple example showing my use case.

I need to write a function that enables me to return all<person>'s which have at least 1 child that MATCHES a specific search string.

persons/person[matches(upper-case(children/child/name), upper-case($searchString))]

Above expression does not work as the matches can only handle a single string as input and not a sequence of names. So I was wondering what would be an elegant way to solve this puzzler?
persons/person[some $n in children/child/name satisifies matches(upper-case($n), upper-case($searchString))]

or if you prefer to avoid range variables,

persons/person[children/child/name[matches(upper-case(.), upper-case($searchString))]]

(I'm not sure that applying upper-case() to a regular expression is particularly good practice, however - for example it will change \w to \W).

Michael Kay
Saxonica

Kind regards, Robby Pelssers


<persons> <person> <name>Robby</name> <children> <child> <name>Lindsey</name> <child> <child> <name>Valerie<name> </child> </children> <person> <person> <name>Audrey</name> <children> <child> <name>Linn</name> <child> <child> <name>Tamara<name> </child> </children> </person> </persons>


Current Thread