xsl-list
[Top] [All Lists]

Re: If nodeset does NOT include

2002-08-30 10:45:13
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



<Prev in Thread] Current Thread [Next in Thread>