counting equal entries

R

R. Heydenreich

Hi all,
I try to create an index page from a document. The idea behind is to
collect a certain word and list it with *all* occurences in the
document, like

foo .... 12, 23, 45
bar .... 2, 5, 88

and so on. I have a XML document which contains entries with different
classes (Java classes).
I have a XSL stylesheet which collects all entries in a sorted order.
But there is one separate entry for each occurence:

foo ... 12
foo ... 23
foo ... 45
bar ... 2

and so on.

Code follows:

<xsl:for-each select="key('index-key', $lower-alphabet)">
<xsl:sort select="@name" case-order="lower-first"/>
<xsl:call-template name="display-index-item">
<xsl:with-param name="item" select="." />
</xsl:call-template>
</xsl:for-each>

The $lower-alphabet is only a variable containing all lower letters.
How can I pass an indicator to the template "display-index-item" where
I can decide if an entry has the same name as the previous one?

TIA,
Ralf.
 
J

Joris Gillis

I try to create an index page from a document. The idea behind is to
collect a certain word and list it with *all* occurences in the
document, like

foo .... 12, 23, 45
bar .... 2, 5, 88

and so on. I have a XML document which contains entries with different
classes (Java classes).
I have a XSL stylesheet which collects all entries in a sorted order.
But there is one separate entry for each occurence:

foo ... 12
foo ... 23
foo ... 45
bar ... 2

Hi,

I'm not sure if this will solve the problem, but you might look at this:

Given this xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<occ name="foo" line="23"/>
<occ name="foo" line="12"/>
<occ name="bar" line="5"/>
<occ name="bar" line="88"/>
<occ name="foo" line="45"/>
<occ name="bar" line="2"/>
</root>

#########################
,this stylsheet:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="text"/>
<xsl:key name="index-key" match="occ" use="@name"/>

<xsl:template match="/">
<xsl:for-each select="//occ[generate-id(.)=generate-id(key('index-key',@name))]/@name">
<xsl:sort select="." case-order="lower-first"/>
<xsl:value-of select="."/>:
<xsl:apply-templates select="//occ[@name=current()]">
<xsl:sort select="@line" case-order="lower-first"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:template>

<xsl:template match="occ">
</xsl:template>

</xsl:stylesheet>
########################
,will output:

bar: 2, 5, 88, foo: 12, 23, 45,


########################
Is this of any use?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,997
Messages
2,570,241
Members
46,833
Latest member
BettyeMacf

Latest Threads

Top