At 2007-12-09 22:58 -0500, Alice Wei wrote:
I am trying to output HTML that sorts the items according to a
particular attribute, and then apply it using position() to display it.
Here is my XML:
<application>
<ability rank="1">Adobe Acrobat Professional</ability>
<type>Graphic Design</type>
</application>
<application>
<ability rank="2">Ulead Video Studio</ability>
<type>Graphic Design</type>
</application>
<application>
<ability rank="2">Dreamweaver</ability>
<type>Graphic Design</type>
</application>
<!--More code-->
</computer>
The XSL:
<xsl:template match="application">
<xsl:for-each select=".">
<xsl:sort select="@rank" order="ascending"/>
<span>
<xsl:attribute name="title">
<xsl:value-of select="type"/>
</xsl:attribute>
<xsl:value-of select="ability"/>
</span>
<xsl:choose>
<xsl:when test="position( ) !=last( )">, </xsl:when>
<xsl:otherwise><!--Don't display anything--></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
This stylesheet works.
This surprises me. For example in the following:
<xsl:template match="application">
<xsl:for-each select=".">
... the <xsl:for-each> does nothing except to corrupt your position() value.
The only problem is that I want the second to last to last element
to use and instead of a comma, and I tried putting it in the
<xsl:otherwise> tags. Didn't work as I thought, though.
Anyone know how I fix this?
Thanks in advance to any who could help.
I suspect you need something along the lines of the code below.
I hope this helps.
. . . . . . . . . Ken
t:\ftemp>type alice.xml
<computer>
<application>
<ability rank="1">Adobe Acrobat Professional</ability>
<type>Graphic Design</type>
</application>
<application>
<ability rank="2">Ulead Video Studio</ability>
<type>Graphic Design</type>
</application>
<application>
<ability rank="2">Dreamweaver</ability>
<type>Graphic Design</type>
</application>
<!--More code-->
</computer>
t:\ftemp>type alice.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:output method="text"/>
<xsl:template match="computer">
<xsl:apply-templates select="application">
<xsl:sort select="@rank" order="ascending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="application">
<span>
<xsl:attribute name="title">
<xsl:value-of select="type"/>
</xsl:attribute>
<xsl:value-of select="ability"/>
</span>
<xsl:if test="position( ) !=last( )">, </xsl:if>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>xslt alice.xml alice.xsl con
Adobe Acrobat Professional, Ulead Video Studio, Dreamweaver
t:\ftemp>
--
Comprehensive in-depth XSLT2/XSL-FO1.1 classes: Austin TX,Jan-2008
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds: publicly-available developer resources and training
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
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>
--~--