counting equal entries

R. Heydenreich

Usenet Archive
Joined
Oct 28, 2004
Messages
2
Reaction score
0
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.
 

Joris Gillis

Usenet Archive
Joined
Sep 28, 2004
Messages
355
Reaction score
0
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

No members online now.

Forum statistics

Threads
548,208
Messages
3,104,802
Members
249,594
Latest member
henrywalsh

Latest Threads

Top