|
Subject: RE: Grouping and Unique Lists From: Bill Martschenko <billmartschenko@xxxxxxxxx> Date: Tue, 28 Sep 1999 15:21:22 -0700 (PDT) |
Ah, I can't keep up with you, Michael. :-) I was
going to try at home tonight...
Just a tidbit to enhance:
The line
<xsl:for-each select="/ITEMLIST/ITEM">
should read
<xsl:for-each select="/ITEMLIST/ITEM"
order-by="CATEGORY">
This way, the input <ITEM>'s can be any order.
Note to IE5 users: IE5 does not support xsl:sort. I
recall that "order-by" has been depracated. Know that
IE5's XSLT is based on the Dec 98 working draft. The
latest draft is Aug 99.
I was also surprised to learn about case sensitivity.
Micheal's script did not work at all for me until I
changed all the element names to lower case to match
my XML.
I didn't think XML tags were case sensitive.
What's the story here?
Bill
--- "Michael J. Dyer" <michael.dyer@xxxxxxxxxx> wrote:
> Bill,
>
> You're absolutely right - IE doesn't support the
> "preceding-sibling"
> construct and the XSL script won't work. However, I
> was able to do a
> workaround using JavaScript.
>
> There are three JavaScript functions -
> SetCurrentGroup, GetCurrentGroup and
> IsNewGroup. I'm not really using GetCurrentGroup ,
> but it's there just to
> be complete. You'll node that when I call the
> IsNewGroup and
> SetCurrentGroup, I pass 'this' along with a text
> string that represents the
> node I want (relative to this).
>
> Hope this helps...
>
> Regards,
>
> Michael
>
>
> <?xml version='1.0'?>
> <xsl:stylesheet
> xmlns:xsl="http://www.w3.org/TR/WD-xsl">
>
> <xsl:template match="/">
>
> <xsl:for-each select="/ITEMLIST/ITEM">
>
> <xsl:if expr="IsNewGroup(this, 'CATEGORY')">
> <xsl:eval>
> SetCurrentGroup(this, 'CATEGORY')
> </xsl:eval>
> <xsl:value-of select="CATEGORY"/>
> </xsl:if>
>
> <xsl:value-of select="NUMBER"/>
> <xsl:value-of select="DESCRIPTION"/>
>
> </xsl:for-each>
>
> </xsl:template>
>
> <xsl:script>
>
> cCurrentGroup = "_empty_" ;
>
> function SetCurrentGroup(cThis, cChar)
> {
> cValue = cThis.selectSingleNode(cChar).text ;
> cCurrentGroup = cValue ;
> return "" ;
> }
>
> function IsNewGroup(cThis, cChar)
> {
> cValue = cThis.selectSingleNode(cChar).text ;
> if (cValue == cCurrentGroup)
> cReturn = false ;
> else
> cReturn = true ;
> return cReturn ;
> }
>
> function GetCurrentGroup()
> {
> return cCurrentGroup ;
> }
>
> </xsl:script>
>
> </xsl:stylesheet>
>
>
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxx]On Behalf Of
> Bill Martschenko
> Sent: Tuesday, September 28, 1999 3:20 PM
> To: xsl-list@xxxxxxxxxxxxxxxx
> Subject: RE: Grouping and Unique Lists
>
>
> Excellent.
>
> I'd like to add that IE5 can't handle it. IE5
> doesn't
> support all of the XSLT constructs.
> "preceding-sibling" is one of them.
>
> I have an IE5 solution in the works that uses
> xsl:script to get past some of the limitations.
>
> The basic ideas are the same: start with a sorted
> list and then as you process them in order check
> your
> predecessor to see if you are first one in a group.
>
> More later--if I succeed :-)--for any IE5
> audience...
>
> Bill
>
>
>
> --- "Sargeant, Richard (GEIS)"
> <Richard.Sargeant@xxxxxxxxxxx> wrote:
> > Hi,
> >
> > I have not tried this with IE5 but this works
> for
> > me and produces exactly
> > the output you specified... FYI I created and
> > previewed this using the
> > Stylus beta editor and then tested it with
> Oracle's
> > XMLparser.
> >
> >
> >
> > <xsl:stylesheet
> > xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
> >
> > <xsl:template
> > match="*|/"><xsl:apply-templates/></xsl:template>
> >
> > <xsl:template match="text()|@*"><xsl:value-of
> > select="."/></xsl:template>
> >
> > <xsl:template match="ITEMLIST">
> > <xsl:apply-templates select="ITEM"/>
> > </xsl:template>
> >
> > <xsl:template match="ITEM">
> > <xsl:if test =
> >
>
"not(CATEGORY=preceding-sibling::ITEM[position()=1]/CATEGORY)">
> > <xsl:value-of
> > select="CATEGORY"/><br/>
> > </xsl:if>
> > <xsl:value-of select="NUMBER"/>
> > <xsl:text> </xsl:text>
> > <xsl:value-of select="DESCRIPTION"/><br/>
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> >
> > regards
> > Richard Sargeant
> >
> >
> > -----Original Message-----
> > From: Michael J. Dyer
> > [mailto:michael.dyer@xxxxxxxxxx]
> > Sent: Monday, September 27, 1999 19:04
> > To: xsl-list@xxxxxxxxxxxxxxxx
> > Subject: Grouping and Unique Lists
> >
> >
> > I've searched the archives and found a few posts
> in
> > this area, but nothing
> > that seems to directly address the problem. I'm
> > working with the Microsoft
> > IE5 XMLDom. Given the following XML:
> > <?XML version='1.0'?>
> > <ITEMLIST>
> > <ITEM>
> > <CATEGORY>Category A</CATEGORY>
> > <NUMBER>00001</NUMBER>
> > <DESCRIPTION>Item 1</DESCRIPTION>
> > </ITEM>
> > <ITEM>
> > <CATEGORY>Category B</CATEGORY>
> > <NUMBER>00002</NUMBER>
> > <DESCRIPTION>Item 2</DESCRIPTION>
> > </ITEM>
> > <ITEM>
> > <CATEGORY>Category B</CATEGORY>
> > <NUMBER>00003</NUMBER>
> > <DESCRIPTION>Item 3</DESCRIPTION>
> > </ITEM>
> > <ITEM>
> > <CATEGORY>Category C</CATEGORY>
> > <NUMBER>00004</NUMBER>
> > <DESCRIPTION>Item 4</DESCRIPTION>
> > </ITEM>
> > </ITEMLIST>
> > 1. Using XSL, convert to the following output
> > (without using the actual
> > category name as part of the XSL)
> > Category A
> > 00001 Item 1
> > Category B
> > 00002 Item 2
> > 00003 Item 3
>
=== message truncated ===
__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: Grouping and Unique Lists, Michael J. Dyer | Thread | Re: Grouping and Unique Lists, David Carlisle |
| File Entity Behaviour, Betty Harvey | Date | Re: Grouping and Unique Lists, David Carlisle |
| Month |