Re: [xsl] Easy way to identify node type?

Subject: Re: [xsl] Easy way to identify node type?
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Thu, 04 Dec 2003 11:54:21 -0500
At 2003-12-04 14:23 -0200, yguaba@xxxxxxxxxxxx wrote:
Is there an easy way (or any way at all) to identify the type of the
node being processed?

Yes, there is a way for all seven kinds of node. This is described on pages 188-189 of the paper rendition of our XSLT book published by Prentice Hall, or pages 192-193 of the Tenth Edition of the PDF rendition of our book that we publish (Eleventh edition, last for XSLT 1.0, coming hopefully soon!):


  <xsl:choose>
    <xsl:when test="self::book:fig">      <!--display caption-->
      <xsl:text>book:fig: </xsl:text><xsl:value-of select="."/>
    </xsl:when>
    <xsl:when test="self::*">                  <!--an element-->
      <xsl:text>Element: </xsl:text><xsl:value-of select="."/>
    </xsl:when>
    <xsl:when test="self::text()">              <!--show text-->
      <xsl:text>Text: </xsl:text><xsl:value-of select="."/>
    </xsl:when>
    <xsl:when test="self::comment()">      <!--reveal comment-->
      <xsl:text>Comment: </xsl:text><xsl:value-of select="."/>
    </xsl:when>
    <xsl:when test="self::processing-instruction()">   <!--pi-->
      <xsl:text>PI: </xsl:text><xsl:value-of select="."/>
    </xsl:when>
    <xsl:when test="count(.|/)=1">                  <!--root-->
      <xsl:text>root </xsl:text>
    </xsl:when>
               <!--specific namespaced-unqualified attribute-->
    <xsl:when test="count(.|../@version)=count(../@version)">
      <xsl:text>version attribute </xsl:text>
    </xsl:when>
                  <!--specific namespace-qualified attribute-->
    <xsl:when test="count(.|../@book:ref)=count(../@book:ref)">
      <xsl:text>book:ref attribute </xsl:text>
    </xsl:when>
                       <!--any namespace-qualified attribute-->
    <xsl:when test="count(.|../@book:*)=count(../@book:*)">
      <xsl:text>book:* attribute </xsl:text>
    </xsl:when>
                                           <!--any attribute-->
    <xsl:when test="count(.|../@*)=count(../@*)">
      <xsl:text>attribute </xsl:text>
    </xsl:when>
                                      <!--specific namespace-->
    <xsl:when test="count(.|../namespace::xsl)=
                    count(../namespace::xsl)">
      <xsl:text>XSL namespace </xsl:text>
    </xsl:when>
                                           <!--any namespace-->
    <xsl:when test="count(.|../namespace::*)=
                    count(../namespace::*)">
      <xsl:text>namespace </xsl:text>
    </xsl:when>
  </xsl:choose>

I hope this helps.

.......... Ken



--
Next public European delivery:  3-day XSLT/2-day XSL-FO 2004-01-??
Instructor-led on-site corporate, government & user group training
for XSLT and XSL-FO world-wide:  please contact us for the details

G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
ISBN 0-13-065196-6                       Definitive XSLT and XPath
ISBN 0-13-140374-5                               Definitive XSL-FO
ISBN 1-894049-08-X   Practical Transformation Using XSLT and XPath
ISBN 1-894049-11-X               Practical Formatting Using XSL-FO
Member of the XML Guild of Practitioners:     http://XMLGuild.info
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc


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



Current Thread