xsl-list
[Top] [All Lists]

Re: Grouping

2005-12-07 02:25:11
Hi prakash,

 <xsl:output method="xml"/>

<xsl:key name="rec" match="row" use="question_id"/>

<xsl:template match="/recordset">

<xsl:for-each select="row">
<xsl:if test="generate-id(.) = generate-id(key('rec', question_id))">
<xsl:text>
</xsl:text>
Answers for question <xsl:value-of select="question_id"/>
</xsl:if>
<xsl:text>
</xsl:text>

<xsl:value-of select="key('rec', question_id)/answer"/>
<xsl:text>
</xsl:text>

</xsl:for-each>

 </xsl:template>

Will you not have a problem here, if question_id are not ordered?
As I read it, you go through all row elements. You check if the value
of question_id is the first of its kind, and if it is, you write the
Answers to question...
Then you proceed to write the value of the answer element.
As I see it, <xsl:value-of select="key('rec', question_id)/answer"/>
is the same as <xsl:value-of select="answer"/>, and as you have not
made sure of the value of question_id in your for-each, then this can
be wrong.

If I have not understood this correctly, please correct me.

A key approach, I would use (modifying your template):

<xsl:for-each select="row[generate-id(.) = generate-id(key('rec',
question_id))]">
Answers for question <xsl:value-of select="question_id"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="key('rec', question_id)/answer">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

This one will work no matter the order of question_id's.

Regards,
Ragulf Pickaxe :-)

--~------------------------------------------------------------------
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>