This is exactly what apply-templates is for. Whenever you see code along the
lines
<xsl:choose>
<xsl:when test="name()='foo'">
you should replace it by a call on apply-templates and a set of template
rules for the different branches, in a special mode if necessary.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Mark Anderson
[mailto:mark(_dot_)anderson(_at_)technique-group(_dot_)com]
Sent: 30 July 2007 23:35
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Finding the current node type
Hi All
I'm trying to figure out a way to determine the "type" of the
current node in an nodeset.
I have a union of two dissimilar nodesets and I need to
number the combined set sequentially in my output. I also
need to output details from each node, but as they are
completely different I need to process each node type
differently based on it's contents.
Here's a silly example
<products>
<speaker>
<woofer>12 inch</woofer>
<rms_power>70 watts</rms_power>
<peak_power>95 watts</peak_power>
<height>40 inches</height>
<width>18 inches</width>
<depth>18 inches</depth>
</speaker>
<laptop>
<disk>80GB</disk>
<screen>15 inch</screen>
<cpu>Intel Core Duo 2.3ghz</cpu>
<weight>5.2lbs</weight>
</laptop>
...
</products>
So, I need to do something like:
<xsl:for-each select="speaker | laptop">
<!-- Assign a sequential Number -->
Item No: <xsl:value-of select="position()"/> <br />
<!-- Now output item-specific details -->
<xsl:choose>
<xsl:when test="node = speaker">
RMS Power: <xsl:value-of
select="rms_power"/> <br />
Peak Power: <xsl:value-of select="peak_power"/>
<br />
</xsl:when>
<xsl:when test="node = laptop">
Disk Drive: <xsl:value-of select="disk"/> <br />
CPU: <xsl:value-of select="cpu"/> <br />
</xsl:when>
</xsl:choose>
</xsl:for-each>
So, what I need to figure out is the test in the when clause
to see which type of node I'm processing.
I could hack it with something like:
<xsl:when test="count(rms_power) > 0">
<!-- Must be a speaker -->
RMS Power: <xsl:value-of select="rms_power"/>
Peak Power: <xsl:value-of select="peak_power"/>
</xsl:when>
However, it's messy and I have to find unique child nodes for
every product.
I'm sure there's a more elegant way
Can anyone help?
TIA
Mark
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--