RE: Grouping and Unique Lists

Subject: RE: Grouping and Unique Lists
From: "Michael J. Dyer" <michael.dyer@xxxxxxxxxx>
Date: Tue, 28 Sep 1999 16:29:53 -0400
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
> Category C
> 00004 Item 4
>
>
>  XSL-List info and archive:
> http://www.mulberrytech.com/xsl/xsl-list
>
>
>  XSL-List info and archive:
> http://www.mulberrytech.com/xsl/xsl-list
>

__________________________________________________
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


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread