Hi George-
Thanks for the code sample. I would like to better understand how this
apply-templates works-
<xsl:template match="*[contains(@class, 'topic/topic')]"
mode="getText"/>
<xsl:apply-templates mode="getText" select="node()"/>
It seems that the template rule would remove the node from the source at the
processing context yet with the apply templates it actually retrieves it- could
you elaborate on this approach - I also need to remove from the node comment
elements before I count the text contents of the node -
If I add an template
<xsl:template match="draft-comment" mode="getText"/>
I get -
BUILD FAILED
java.lang.StackOverflowError
( I am building with Ant but this is an xsl related error . )
Karen
------------------------------
Date: Tue, 16 May 2006 10:04:22 +0300
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
From: George Cristian Bina <george(_at_)oxygenxml(_dot_)com>
Subject: Re: [xsl] Collect word count with xslt2.0 on saxon 8
Message-ID: <44697976(_dot_)1000108(_at_)oxygenxml(_dot_)com>
Hello Karen,
You can get the count of words more easily than that. First you can get
the text in a variable that belongs to an element with topic/topic but
not to other elements inside it with the same mark and then just count
the words in that.
For getting the text once we match on a topic/topic element we use a new
mode for apply-template on which we do nothing on elements with
topic/topic thus we exclude their text content.
The following stylesheet shows that
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/">
<counts>
<xsl:apply-templates/>
</counts>
</xsl:template>
<xsl:template match="text()"/>
<xsl:template match="*[contains(@class, 'topic/topic')]">
<xsl:variable name="text">
<xsl:apply-templates mode="getText" select="node()"/>
</xsl:variable>
<record>
<text>
<xsl:value-of select="$text"/>
</text>
<count>
<xsl:value-of
select="count(tokenize(lower-case($text),'(\s|[,.!:;]|[n][b][s][p][;])+')[string(.)])"
/>
</count>
</record>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, 'topic/topic')]"
mode="getText"/>
</xsl:stylesheet>
--~------------------------------------------------------------------
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>
--~--