xsl-list
[Top] [All Lists]

RE: how to test for the element type of the current node

2003-07-02 01:15:04



-----Original Message-----
From: Godmar Back [mailto:gback(_at_)stanford(_dot_)edu]
Sent: 02 July 2003 08:51
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] how to test for the element type of the current node



Hi,

what expression do I use if I need to test the type of the 
current node
in a for-each loop?

Say I have a DTD that has     

      <!ELEMENT A (B|C)*>

and I want to write

<xsl:template match="A">
    <xsl:for-each select="*">
      <xsl:choose>
          <xsl:when test="if this node is a B"> <--- this is 
what I can't figure out
              apply-templates for B

              ...
          <xsl:otherwise>
              do something else for C
    ...


I tried ".=B" inside the test, which doesn't work, I tried just "B", 
I tried "boolean(B)", nothing works.


I have rejigged the test a little so we are not talking in terms of yukky dtd's

xslt file
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 


<xsl:template match="test">

<xsl:for-each select="node()">

<xsl:choose>
        <xsl:when test="name()='a'">
        I have matched an a element
        </xsl:when>
  
        <xsl:otherwise>
         must be something else
        </xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


xml file
<?xml version="1.0" ?>
<test>
<a>1</a>
<b>2</b>
<c>3</c>
</test>

basically you are testing on the name of the element, so you must use the 
name() function...remember that if you are using namespaces ( xmlns ) that u 
may have to use local-name(). Also this may not be what you want to do, you may 
want to test the node identity, not the name of the node.

well, gl jim fuller


Note that I believe that using <xsl:template match="B"> won't 
solve my problem
because I need to do something specific that I only need to if the 
B element is nested inside  the A element.

This seems such an elementary thing to do (!?), but maybe I 
still don't
understand XSL well enough to see an alternative.

Thanks!

      - Godmar


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


This e-mail and any files transmitted with it are confidential and intended 
solely for the use of the individual or entity to whom they are addressed. If 
you are not the intended recipient please contact the sender immediately. Any 
disclosure, copying, distribution or any other use of this communication is 
strictly prohibitedand may be unlawful. Stuart Lawrence Marketing 
Communications Limited reserves the right to monitor and intercept 
communications for unlawful business purposes.

This also confirms that this message has been swept for viruses, although 
Stuart Lawrence Marketing Communications Limited accepts no responsibility for 
any loss or damage resulting directly or indirectly from the use of this email 
or contents.

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