xsl-list
[Top] [All Lists]

Re: [xsl] Grouping based on key result

2009-03-03 06:40:54


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. 
________________________________________________________________________

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--