This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: IF test


laksh vr wrote:
> I want to check whether a arrtibute is present in a
> element.For ex,
> If there is a Book element, i want to check whether he
> has got a ISBN attribute. ISBN is not a element.It
> comes as a part of Book element.If a ISBN attribute is
> not found then i'm planning to give it a new Code
> attribute.
> I have problems in finding whether it is present or
> not.I used 
> <xsl:template match="Book">
>     <xsl:if test="not(@ISBN)">
>        .
>        .
>        .
> </xsl:template>

Looks fine to me.

"@ISBN" identifies a node-set consisting of the ISBN attribute of the current
Book element that you are processing.

"not(@ISBN)" coerces that node-set to a boolean and returns its opposite. The
coercion results in a boolean 'true' if any nodes in the set; false otherwise.
So, because not() gives you the opposite, "not(@ISBN)" will be true if there
is no 'ISBN' attribute.

Is this not what you wanted?

Perhaps you always have an ISBN attribute, but it sometimes has an empty 
string as its value? ...like <Book ISBN=""> ?

In that case,

<xsl:if test="not(string(@ISBN))">

or 

<xsl:if test="not(normalize-space(@ISBN))">

will do what you want.

   - Mike
____________________________________________________________________________
  mike j. brown                   |  xml/xslt: http://skew.org/xml/
  denver/boulder, colorado, usa   |  personal: http://hyperreal.org/~mike/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]