On Tue, Nov 18, 2003 at 01:08:39PM -0500, cknell(_at_)onebox(_dot_)com wrote:
Sorry if another version of this appears without the stylesheet. I expected
this stylesheet to work just the way the example shown in the spec does, but
the comma appears after all instances of <in>. Can anyone see what I'm
missing?
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match="/signature">
<signature>
<xsl:apply-templates />
</signature>
</xsl:template>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name() = 'in'">
<xsl:copy-of select="." />
<xsl:if test="not(position() = last())">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
--
Charles Knell
cknell(_at_)onebox(_dot_)com - email
Your input document is:
<signature>signature <identifier>DNSQuery</identifier>
<in>in<long>long</long><identifier>a</identifier></in>
<in>in<string>string</string><identifier>b</identifier></in>
<in>in<float>float</float><identifier>c</identifier></in>
</signature>
I suppose you are expecting position() to be 1, 2, or 3, and last() to
be 3. But they're not. You have text nodes (both empty and non-empty)
within your <signature> element.
For your document, position() is 4, 6, and 8, and last() is 9.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list