[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: key grouping with non-existing or empty elements

Subject: RE: key grouping with non-existing or empty elements
From: Xiaocun Xu <xiaocunxu@xxxxxxxxx>
Date: Mon, 6 Jan 2003 09:21:47 -0800 (PST)
xslt empty key value
Thanks for pointing out my mistake.  In Joerg's
solution, I did not see "string()" in the "use"
attribute.  Once I add it, it worked!

Thanks,
Xiaocun

--- Michael Kay <michael.h.kay@xxxxxxxxxxxx> wrote:
> The "use" attribute identifies a set of values that
> can each be used to
> find the "match" item. For example, match="book"
> use="author" will index
> the book by each of its authors. If the book has no
> authors, then it
> will not be indexed and no key() expression using
> this key will find it.
> 
> If books have zero-or-one authors, then you can
> write match="book"
> use="string(author)", and a book with no authors
> will then be
> retrievable using the key value "".
> 
> Michael Kay
> Software AG
> home: Michael.H.Kay@xxxxxxxxxxxx
> work: Michael.Kay@xxxxxxxxxxxxxx 
> 
> > -----Original Message-----
> > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Xiaocun Xu
> > Sent: 03 January 2003 19:48
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Re:  key grouping with non-existing
> or empty elements
> > 
> > 
> > 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
> > > > &gt; $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 &gt; $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
> > 
> 
=== message truncated ===


__________________________________________________
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.