This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: If nodeset does NOT include
- From: Jeni Tennison <jeni at jenitennison dot com>
- To: "Martinez, Brian" <brian dot martinez at trip dot com>
- Cc: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 30 Aug 2002 18:45:13 +0100
- Subject: Re: [xsl] If nodeset does NOT include
- Organization: Jeni Tennison Consulting Ltd
- References: <E452FB064147344B876E03A3FEE92BD801451B59@TNIDEXG01.trip.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi Brian,
>> I want to call a template only if a nodeset does
>> not contain a match for a variable, ie:
>>
>> <xsl:if test="(.//InqInfo/Member_Id != $listfor)">
>> <xsl:call-template
>> name="Recipbutton">
>>
>> where != should mean "does not include"
>> I know it's a stupid question, but I can't see a
>> simple, straightforward way to do this.
>
> != means "does not equal"--not quite the same thing. If you want to
> test if $listfor does not exist within Member_Id, you could try:
>
> <xsl:if test="not(contains(.//InqInfo/Member_Id,$listfor))">
> <xsl:call-template name="Recipbutton"/>
> </xsl:if>
>
> (newbie post--please correct me as necessary!)
OK :) The contains() function tests whether the first argument string
contains the second argument string. For example:
contains('foobar', 'ob')
would be true.
What Thomas was wanting to do, I believe, is to see whether any of the
Member_Id elements in the document contain the value $listfor, and if
not then call the Recipbutton template. In other words, he wants to
test whether any of the nodes in the node set have a value that is
*equal to* $listfor. Contains() doesn't do that. He needs:
<xsl:if test="not(.//InqInfo/Member_Id = $listfor)">
<xsl:call-template name="Recipbutton" />
</xsl:if>
I think.
When you pass a node set to a function that wants a string, the node
set is converted to a string by taking the value of the first node in
the node set. So your suggestion of:
not(contains(.//InqInfo/Member_Id, $listfor))
would actually return true if the first Member_Id didn't contain the
value of the $listfor variable, and false otherwise.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list