|
Subject: Re: [xsl] key grouping with non-existing or empty elements From: Xiaocun Xu <xiaocunxu@xxxxxxxxx> Date: Fri, 3 Jan 2003 11:47:44 -0800 (PST) |
Hi, Joerg:
I tried:
<xsl:apply-templates select="key('lineitemLotsKey',
string(''))" mode="LineItem"/>
and
<xsl:apply-templates select="key('lineitemLotsKey',
'')" mode="LineItem"/>
both did not find the rows with non-existing or empty
key elements. Any particular caution I need to pay
here?
Thanks,
Xiaocun
--- Joerg Heinicke <joerg.heinicke@xxxxxx> wrote:
> Hello Xiaocun,
>
> getting what you want is really simple using keys,
> you only must set it
> up as top-level element and use
> string(cell[@column='6']) as grouping
> key. So both non-existing element and empty element
> are evaluated to
> empty string "":
>
> <xsl:key name="rows" match="row"
> use="string(cell[@column='6'])"/>
>
> <xsl:template match="rootelement">
> <table border="1">
> <xsl:apply-templates select="row[generate-id()
> =
> generate-id(key('rows',
> string(cell[@column='6'])))]" mode="start-group"/>
> </table>
> </xsl:template>
>
> <xsl:template match="row" mode="start-group">
> <tr>
> <td>starting a new group with content of
> column 6: "<xsl:text/>
> <xsl:value-of
> select="cell[@column='6']"/>"<xsl:text/>
> </td>
> </tr>
> <xsl:apply-templates select="key('rows',
> string(cell[@column='6']))"/>
> </xsl:template>
>
> <xsl:template match="row">
> <tr>
> <td>
> <xsl:value-of select="cell[@column='1']"/>
> </td>
> </tr>
> </xsl:template>
>
> Regards,
>
> Joerg
>
> Xiaocun Xu wrote:
> > Hi,
> >
> > I have a question regarding grouping with key.
> > Following is the input XML example:
> >
> > <row row="1">
> > <cell column="1">default_item1</cell>
> > <cell column="6"></cell>
> > </row>
> > <row row="2">
> > <cell column="1">default_item2</cell>
> > </row>
> > <row row="3">
> > <cell column="1">lot01_item1</cell>
> > <cell column="6">lot01</cell>
> > </row>
> > <row row="4">
> > <cell column="1">lot02_item2</cell>
> > <cell column="6">lot02</cell>
> > </row>
> >
> > I have a number of items that need to be grouped
> by
> > lot (cell[column=6]). As you can see, this cell
> is
> > optional.
> > I need to group rows that does not have cell[6]
> and
> > rows have cell[6] as empty string into the same
> group,
> > then process each of the row within the group via:
> > <xsl:apply-templates
> select="key('lineitemLotsKey',
> > $lotName)" mode="LineItem"/>
> >
> > The way I currently handling this is not very
> > elegent:
> > 1. create a key on lot (cell 6) for all rows with
> cell
> > 6 element:
> > <xsl:variable name="LineItemLotColumn"
> select="6"/>
> > <xsl:key name="lineitemLotsKey" match="//row[@row
> > > $LineItemHeaderRow and
> > (cell[@column=$LineItemLotColumn])]"
> > use="cell[@column=$LineItemLotColumn]"/>
> > 2. create a separate variable that contains rows
> that
> > does not have cell 6 element:
> > <xsl:variable name="LineItemDefaultLot"
> > select="//row[@row > $LineItemHeaderRow and
> > not(cell[@column=$LineItemLotColumn])]"/>
> > 3. process $LineItemDefaultLot separately.
> > 4. when process rows in key lineitemLotsKey, check
> for
> > string(cell[6]). If empty, then does similar
> > processing as #3.
> >
> > Of course, a slight improvement would be for #2,
> > instead of get all rows that does not have cell 6
> > element, also get all rows that has cell 6 element
> > equal to empty string. That way, I would not need
> to
> > check for string(cell[6]) in step #4.
> >
> > Is there a more elegent way than these above?
> >
> > Thanks,
> >
> > Xiaocun
> > xiaocunxu@xxxxxxxxx
>
>
>
>
> XSL-List info and archive:
> http://www.mulberrytech.com/xsl/xsl-list
>
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] string parameter to node-, Passin, Tom | Thread | Re: [xsl] key grouping with non-exi, Joerg Heinicke |
| Re: [xsl] [saxon] catalogs, Tobias Reif | Date | [xsl] C++ Engines, Alan Gutierrez |
| Month |