RE: [xsl] HOW TO CHECK FOR EXISTENCE OF A NODE

Subject: RE: [xsl] HOW TO CHECK FOR EXISTENCE OF A NODE
From: "Mike Rudolph" <mrudolph@xxxxxxx>
Date: Fri, 14 Mar 2003 13:30:58 -0600
I just ordered both Michael's and Jeni's books.  Thanks for the help.

Now I have a question regarding Cold Fusion... :D

Mike

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Bix
Sent: Friday, March 14, 2003 12:07 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] HOW TO CHECK FOR EXISTENCE OF A NODE


Mike,

You should really consider purchasing a book or two on XSLT.  This type of a
question can easily be answered there.  Michael Kay's XSLT or Jeni
Tennison's Learning XSLT are great references.  In addition, please look
through http://www.dpawson.co.uk/.  Jeni also has a nice website that has a
broad introduction to some of the questions you'll probably come up with:
http://www.jenitennison.com/xslt/.  Finally, I think you should take a look
at the <xsl:if> and <xsl:choose><xsl: when/><xsl:otherwise/></xsl:choose>
elements.  I believe you can get away with using the <if> element, but you
may have other cases.  The choose/when/otherwise acts in a similar manner to
the if-then-else statements in c.

I made the assumption that you have an XSLT processor capable of handling
version 1.1 of XSLT.  In addition, I made the assumption that you did not
want a box to appear at all unless the current node contained the
"header_notes" element.  I've also included a full stylesheet with a variety
of different elements from within the XSLT language to give you and idea of
what you should be able to learn how to do from the references I mentioned
above.


<x:stylesheet version="1.1" xmlns:x="http://www.w3.org/1999/XSL/Transform";>

    <x:attribute-set name="box">
        <x:attribute name="border">4</x:attribute>
        <x:attribute name="width">100%</x:attribute>
        <x:attribute name="valign">top</x:attribute>
        <x:attribute name="cellpadding">5</x:attribute>
    </x:attribute-set>

    <x:attribute-set name="cell">
        <x:attribute name="colspan">2</x:attribute>
        <x:attribute name="width">100%</x:attribute>
        <x:attribute name="valign">top</x:attribute>
    </x:attribute-set>

    <x:template match="/">

        <!-- Do something here to get it into the right form -->

        <x:if test="header_notes">
            <x:call-template name="makeBox">
                <x:with-param name="node" select="."/>
            </x:call-template>
        </x:if>

    </x:template>


    <x:template name="makeBox">
        <x:param name="node" select="."/>

        <x:element name="table" use-attribute-sets="box">
            <x:element name="tr">
                <x:element name="td" use-attribute-sets="cell">
                    <x:for-each select="$node/header_notes">
                        <x:value-of select="header_notes_text"/><x:element
name="br"/>
                    </x:for-each>
                </x:element>
            </x:element>
        </x:element>

    </x:template>


</x:stylesheet>

----- Original Message -----
From: "Mike Rudolph" <mrudolph@xxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Friday, March 14, 2003 10:54 AM
Subject: [xsl] HOW TO CHECK FOR EXISTENCE OF A NODE


>
> Newbie here.  I am looking for the proper element to evaluate the
existence
> of a node in order to suppress the generation of an HTML display 'box' if
a
> particular node does not exist.  So, instead of producing a box with a
> caption of 'HEADER NOTES' when there are no header notes, I would rather
not
> produce the box at all to cut down on the clutter.  Here is the code which
> makes the box and displays any header_notes_text if it exists.   For
> example,
>
>
>      <TABLE BORDER="4" WIDTH="100%" VALIGN="TOP" CELLPADDING="5">
>        <TR>
>          <TD WIDTH="100%" VALIGN="TOP" COLSPAN="2">
>            <H4 ALIGN="LEFT">HEADER NOTES AREA</H4>
>               <xsl:for-each select="header_notes">
>               <xsl:value-of select="header_notes_text" /><BR/>
>               </xsl:for-each>
>          </TD>
>        </TR>
>      </TABLE>
>
>
>
> I tried wrapping the above with xsl:template but got this error:
> Keyword xsl:template may not be used here.
>
> I have not had any ah-ha experiences yet, so I don't see the obvious.
>
> ----------
>
> Mike Rudolph - EDI Coordinator
> Green Bay Packaging Inc.
> Phone: 920.433.5426
> Fax:   920.438.5426
> Email: mrudolph@xxxxxxx
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>

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


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


Current Thread