|
Subject: RE: [xsl] Collect word count with xslt2.0 on saxon 8 From: "Karen McAdams" <kamcadam@xxxxxxxxx> Date: Wed, 17 May 2006 13:02:20 -0700 |
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@xxxxxxxxxxxxxxxxxxxxxx
From: George Cristian Bina <george@xxxxxxxxxxxxx>
Subject: Re: [xsl] Collect word count with xslt2.0 on saxon 8
Message-ID: <44697976.1000108@xxxxxxxxxxxxx>
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][;])+')[str
ing(.)])"
/>
</count>
</record>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, 'topic/topic')]"
mode="getText"/>
</xsl:stylesheet>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Collect word count with x, George Cristian Bina | Thread | Re: [xsl] Collect word count with x, George Cristian Bina |
| Re: [xsl] Need help for XSL beautif, Wendell Piez | Date | [xsl] XSLT 2.0/XPath 2.0 Date arith, cknell |
| Month |