RE: [xsl] groupi-by statements?

Subject: RE: [xsl] groupi-by statements?
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 26 Aug 2004 17:51:33 +0100
The obvious answer is there's an error in your path expression, but it's
hard to identify it without having the source document handy.

Michael Kay 

> -----Original Message-----
> From: Bruce D'Arcus [mailto:bdarcus@xxxxxxxxxxxxx] 
> Sent: 26 August 2004 16:51
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] groupi-by statements?
> 
> I need to repeat this question:
> 
> My 2.o stylesheet has a function it uses to group records based on  
> author.
> 
> However, the grouping and sorting problem is more complex than this,  
> and is based on the following rule:
> 
> 1) use author-name string
> 2) if there is no author name:
> 	a.  when dealing with a periodical, use the periodical 
> title in place  
> of the author name
> 	b. otherwise use "anonymous"
> 
> So, in other words, if I have a magazine article from Newsweek, it  
> would sort and format like so:
> 
> 	Newsweek (2000) Article Title ....
> 
> Currently, it incorrectly does this:
> 
> 	(2000) Article Title  ....
> 
> Here's my current code:
> 
> <xsl:function name="bib:grouping-key" as="xs:string">
>    <xsl:param name="bibref" as="element(mods:mods)" />
>    <xsl:choose>
>    <xsl:when test="$bibref/mods:name">
>      <xsl:value-of separator=";">
>        <xsl:for-each select="$bibref/mods:name">
>          <xsl:value-of
>            select="string-join((mods:namePart[@type = 'family']|
> 		   mods:namePart[not(@type)],
> 	           mods:namePart[@type = 'given']), ',')" />
>        </xsl:for-each>
>      </xsl:value-of>
>     </xsl:when>
>     <xsl:otherwise>
>       <xsl:choose>
> <!-- test to see if we have a periodical article -->
>         <xsl:when  
> test="$bibref/mods:relatedItem[@type='host']/mods:issuance =  
> 'continuing'">
>           <xsl:for-each select="$bibref">
> <!-- use periodical title -->
>             <xsl:value-of  
> select="mods:relatedItem[@type='host']/mods:titleInfo[not(@typ
> e)]/mods: 
> title"/>
>           </xsl:for-each>
>         </xsl:when>
>         <xsl:otherwise>
>           <xsl:text>Anonymous</xsl:text>
>         </xsl:otherwise>
>       </xsl:choose>
>     </xsl:otherwise>
>     </xsl:choose>
> </xsl:function>
> 
> The main bib template then just calls the function like so:
> 
>      <xsl:for-each-group select="$bibref" 
> group-by="bib:grouping-key(.)">
>        <xsl:sort select="current-grouping-key()"/>
> 
> What have I done wrong, and how do I fix it?
> 
> Bruce
> 
> 
> --
> Bruce D'Arcus, PhD
> Miami University
> 216 Shideler Hall
> Oxford, OH 45056
> 513-529-1521

Current Thread