Re: [xsl] Grouping based on key result

Subject: Re: [xsl] Grouping based on key result
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 3 Mar 2009 11:40:28 GMT
> Which is showing error at tokenize () function as  "XPTY0004: A
> sequence of more than one item is not allowed as the first argument of
>   tokenize()"

you could avoid that by applying tokenize to each item separately ie not
tokenize($aff,', ')
but
$aff/tokenize(.,', ')
(by the way it's safer to use ',\s+' rather than ', ' unless you know
your input is highly regular.)

However this can not work as you intend. 
     <xsl:for-each-group select="author" group-adjacent="$count">
variables hold values not expression fragments so $count (or any other
variable)  would have the same value each time it is evaluated, so all
items will appear in the same group.

the group-aadjacent attribute needs to hold an expression that evaluates
to different values at group boundaries It could be inlined into teh
attribute, but here I suggest a function:






<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
		xmlns:xs="http://www.w3.org/2001/XMLSchema";
		xmlns:f="data:,f"
		exclude-result-prefixes="xs f">
 
<xsl:output indent="yes" encoding="US-ASCII"/>
<xsl:strip-space elements="*"/>

<xsl:key name="country" match="affiliation/textfn"
use="parent::affiliation/@id"/>
<xsl:template match="author-group">
     <xsl:for-each-group select="author" group-adjacent="f:country(.)">
        <xsl:apply-templates select="current-group()"/>
       (<xsl:value-of select="current-grouping-key()"/>)
     </xsl:for-each-group>

</xsl:template>

<xsl:template match="author">
<author><xsl:value-of select="given-name,surname"/></author>
</xsl:template>

<xsl:function name="f:country" as="xs:string">
 <xsl:param name="a" as="element()"/>
 <xsl:sequence select="key('country', $a/cross-ref/@refid,root($a))/tokenize(.,',\s+')[last()]"/>
</xsl:function>

</xsl:stylesheet>


$ saxon9 ag.xml ag.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<author>JungKun Park</author>
<author>HoEun Chung</author>
<author>Weon Sang Yoo</author>
       (USA)




________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 
________________________________________________________________________

Current Thread