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 |