[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] sorting titles w stopwords but w/o value in every title node
Subject: Re: [xsl] sorting titles w stopwords but w/o value in every title node From: "cking" <cking@xxxxxxxxxx> Date: Thu, 2 Sep 2004 13:33:04 +0200 |
Hi Susan, I modified the stylesheet to display the titles on first occurence in the table, This is the output I get now: doc-number title description arrival-date 53690 American Artist v.68:no.738(2004:Jan.) 02/26/2004 57769 The American city & country v.119:no.3(2004:Mar.) 03/25/2004 57769 v.119:no.1(2004:Jan.) 02/11/2004 58345 American demographics v.26:no.3(2004:Apr.) 04/12/2004 58345 v.26:no.2(2004:Mar.) 03/06/2004 58345 v.26:no.1(2004:Feb.) 02/05/2004 58615 Forbes. v.173:no.5(2004:Mar.15) 03/15/2004 58615 v.173:no.2(2004:Feb. 02) 01/21/2004 58615 v.173:no.1(2004:Jan. 12) 01/12/2004 I added a key: <xsl:key name="titles" match="//section-02/title[string(.)]" use="../doc-number"/> And then instead of directly writing to the table, I created another global variable, already sorted, structured like <output> <title doc-number="53690" title="American Artist" description="v.68:no.738(2004:Jan.)" arrival-date="02/26/2004"/> <title doc-number="57769" title="The American city & country" description="v.119:no.3(2004:Mar.)" arrival-date="03/25/2004"/> <title doc-number="57769" title="The American city & country" description="v.119:no.1(2004:Jan.)" arrival-date="02/11/2004"/> <title doc-number="58345" title="American demographics" description="v.26:no.3(2004:Apr.)" arrival-date="04/12/2004"/> ... </output> where every record has its full title. Then, when writing the output in the table, I only print the title if it's the first occurence of that doc-number. <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:sw="http://my.stopwords/sw" extension-element-prefixes="exsl sw" > <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" /> <sw:stop> <sw:word>the</sw:word> <sw:word>a</sw:word> <sw:word>an</sw:word> </sw:stop> <xsl:variable name="stop-words" select="document('')/xsl:stylesheet/sw:stop/sw:word"/> <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/> <xsl:key name="titles" match="//section-02/title[string(.)]" use="../doc-number"/> <xsl:variable name="sort-titles"> <xsl:for-each select="//section-02"> <xsl:if test="string(title)"> <title doc-number="{doc-number}"> <xsl:variable name="lower-title" select="translate(title, $uppercase, $lowercase)"/> <xsl:choose> <xsl:when test="$stop-words[starts-with($lower-title, concat(translate(., $uppercase, $lowercase), ' '))]"> <xsl:value-of select="substring-after($lower-title,' ')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$lower-title"/> </xsl:otherwise> </xsl:choose> </title> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:variable name="output"> <xsl:for-each select="//section-02/title"> <xsl:sort select="exsl:node-set($sort-titles)/*[@doc-number = current()/../doc-number]"/> <xsl:sort select="number(concat(substring(../arrival-date, 7,4), substring(../arrival-date, 1,2), substring(../arrival-date, 4,2)))" order="descending"/> <title doc-number="{../doc-number}" title="{key('titles', ../doc-number)}" description="{../description}" arrival-date="{../arrival-date}"/> </xsl:for-each> </xsl:variable> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>sort without stop-words</title></head><body> <table border="1"> <tr> <th>doc-number</th> <th>title</th> <th>description</th> <th>arrival-date</th> </tr> <xsl:for-each select="exsl:node-set($output)/*"> <xsl:variable name="title"> <xsl:if test="not(preceding-sibling::*[@doc-number = current()/@doc-number])"> <xsl:value-of select="@title"/> </xsl:if> </xsl:variable> <tr> <td><xsl:value-of select="@doc-number"/></td> <td><xsl:value-of select="$title"/></td> <td><xsl:value-of select="@description"/></td> <td><xsl:value-of select="@arrival-date"/></td> </tr> </xsl:for-each> </table> </body></html> </xsl:template> </xsl:stylesheet> Cheers, Anton Triest
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] sorting titles w stopword, cking | Thread | Re: [xsl] sorting titles w stopword, cking |
Re: [xsl] date arithmetic, David Sinclair | Date | Re: [xsl] sorting titles w stopword, cking |
Month |
Keywords