| 
 
Subject: RE: [xsl] use of xsl:key in cross-referencing From: "Lars Huttar" <lars_huttar@xxxxxxx> Date: Mon, 24 Mar 2003 10:54:46 -0600  | 
Dear Xiaocun,
> To define two keys for the two groups with the same
> name but different "use":
> <xsl:key name="QuestionnaireKey" match=//row[@row <
> 20]" use="string(cell[@column=2])"/>
> <xsl:key name="QuestionnaireKey" match=//row[@row >
> 20]" use="string(cell[@column=1])"/>
>
> Use Muenchian method to process each just once, for
> the 2nd group:
> <xsl:apply-templates select="//row[@row > 20 and
> @row < 30][count(.|key('QuestionnaireKey',
> string(cell[@column=1]))[1]) = 1]"/>
> but this will miss questionnaire QC.
Huh?  I can see how it will miss questionnaire QB, but not QC.
> I guess to take advantage of the combined key, I need
> to do select on all rows, like:
> <xsl:apply-templates
> select="//row[count(.|key('QuestionnaireKey',
> string(cell[@column=1]))[1]) = 1]"/>
> Would the above work?
I don't think so, because it uses @column=1 for all rows,
instead of using @column=2 for the first group and @column=1
for the second group.
> If so, how can I tell if the
> row being processed is from group 1 (Questionnaire) or
> 2 (Question)?
Above, you had "@row > 20 and @row < 30".  Do you know
these boundary numbers in advance?  If so, why not use them.
Here's a select expression and template that should allow you to
process each Questionnaire once...
        <xsl:apply-templates select="/range/row[count(.|key('QuestionnaireKey',
                                     string(cell[@column=1 and
                                       ../@row > 20] |
                                     cell[@column=2 and
                                       ../@row < 20]))[1]) = 1]" />
...
  <xsl:template match="row">
    <p>
      <xsl:choose>
        <xsl:when test="@row < 20">
          Processing Questionnaire <xsl:value-of select="cell[@column=2]" />
        </xsl:when>
        <xsl:otherwise>
          Processing Questionnaire <xsl:value-of select="cell[@column=1]" />
        </xsl:otherwise>
      </xsl:choose>
    </p>
  </xsl:template>
I tried this with your test data and it displayed 
	Processing Questionnaire QA
	Processing Questionnaire QB
	Processing Questionnaire QC
Does this solve your problem?
Lars
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] use of xsl:key in cross-r, Xiaocun Xu | Thread | RE: [xsl] use of xsl:key in cross-r, Xiaocun Xu | 
| Re: [xsl] Breaking up XML(XHTML) in, David Carlisle | Date | [xsl] First Occurance Problem, Deepak Rao | 
| Month |