Subject: [xsl] current-group()[1] within xsl:for-each-group From: Kevin Rodgers <kevin.rodgers@xxxxxxx> Date: Tue, 1 Mar 2005 19:15:29 -0700 |
This is a much harder problem than my previous question :-/ I've got this in a template: <xsl:for-each-group select="mb3e:document" group-by="mb3e:fam_id"> <xsl:sort select="mb3e:prim_sort_key"/> <xsl:variable name="first-structured-number" select="esd:structured-number(current-group()[1])"/> <xsl:apply-templates mode="mil" select="current-group()"> <xsl:with-param name="family-structured-number" select="$first-structured-number"/> <xsl:sort select="mb3e:date_list/mb3e:date[@type='PUBL']" order="descending"/> </xsl:apply-templates> </xsl:for-each-group> The idea is to process the mb3e:document elements in groups, which are defined as having mb3e:fam_id subelements with the same content. And within each group, to process them in reverse order of their publication date (in YYYY-MM-DD format), in each case using the result of calling the esd:structured-number function on the most recent document. (The groups themselves are processed according to the mb3e:prim_sort_key order.) The esd:structured-number function is slow, so I only want to call it once per group. Actually, the template that is applied within the xsl:for-each-group instruction has to call it for each mb3e:document element, but I want to avoid calling it more than once for any of those elements (including the first, i.e. most recent): <xsl:variable name="structured-number" select="if (position() = 1) then $family-structured-number else esd:structured-number(.)"/> I think this works most of the time, but sometimes the family-structured-number parameter value (i.e. $first-structured-number) is not the value that would be returned if the esd:structured-number function were called on the most recent mb3e:document element in the group. For example, in once case it was the 7th most recent of a group of 58. Is there something inherently wrong with the code above? I know from the output that the mb3e:document elements are grouped and sorted as I intend. The output also indicates that the postition() = 1 test in the mb3e:document template is working. But for some reason the current-group()[1] expression within the xsl:for-each-group instruction isn't always returning the element I expect. Just in case, here's an abbreviated example showing all the referenced elements and attributes above: <document> <prim_sort_key>MIL PRF 0000001</prim_sort_key> <date_list> <date type="PUBL">2003-06-11</date> <date type="PUBL_MOD">2003-06-17</date> <date type="IHS_MOD">2003-07-22</date> </date_list> <fam_id>AOUBEAAAAAAAAAAA</fam_id> </document> Thanks, -- Kevin Rodgers
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSL & Entities, David Carlisle | Thread | RE: [xsl] current-group()[1] within, Michael Kay |
Re: [xsl] XSL & Entities, c p | Date | RE: [xsl] Separating XSLT 1 and 2 h, Michael Kay |
Month |