Print

Print


Hello Bob, 

Bob Walser on Thursday 31 January 2008 20:17:

> I have an XSL question. I'm trying to select <c0x> entries with 
> certain <pername>s in the <unittitle> (always a child of <did>) but 
> my xsl only finds those where the searched-for name occurs first 
> (when there are multiple names). How can I fix the test? Here is what I 
> have:
>                 <xsl:for-each select="//*[@otherlevel='init' and 
> (contains(./did//persname, $SearchName) or 
> contains(./did//persname/@normal, $SearchName))]">
>                         <xsl:call-template name="init-display"/>
>                 </xsl:for-each>
> The problem is that (contains(./did//persname $SearchName)) only 
> tests the first <persname> in a given unittitle. Can someone tell me 
> how to address this?



You're working in XSLT 1.0, which gives you the first instance and lets
you get away with it. 

In XSLT 2.0 you'd get a Run-time error. In Saxon:
XPTY0004: A sequence of more than one item is not allowed as the first
argument of contains() ("Frans Laarmans", "Jules Valenpint", ...) 
Transformation failed: Run-time errors were reported


You might try 

<xsl:for-each select="//*[@otherlevel='init']/did//persname[contains(., $SearchName) 
or contains(@normal, $SearchName)]">


Cheers, 

Dirk van Laanen