[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: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Sat, 04 Jan 2003 20:01:44 +0100
|
Hello Xiaocun,
it should work. So I can't tell you what's wrong without knowing your
stylesheet or in which context you used these <xsl:apply-templates/>
below. Maybe you have no template with mode attribute. Or the key
declaration is wrong. Or the element is matched by the wrong template.
For a test you can add a template like the following:
<xsl:template match="*" mode="LineItem">
matched on element <xsl:value-of select="name()"/>.
</xsl:template>
Without knowing your stylesheet I can only say that even the test can
fail, if there is another template similar to the above one, that
matches the elements with a higher priority. And if you set the priority
to a high value(using priority="20" or so), the normal behaviour of the
stylesheet can fail.
Regards,
Joerg
Xiaocun Xu wrote:
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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|