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

RE: Sorting & Grouping

Subject: RE: Sorting & Grouping
From: Satish Patil <Satish.Patil@xxxxxxx>
Date: Fri, 27 Apr 2001 09:39:00 -0400
satish patil
 Mark,

 I appreciate your help. I read in documentation that AXIS refers to
document order and not sorted order.

Ex: If I have a  document
<parent>
	<typeA>
		<id>9</id>
	</typeA>
	<typeB>
		<id>8</id>
	</typeB>
	<typeC>
		<id>6</id>
	</typeC>
	<typeB>
		<id>7</id>
	</typeB>	
</parent>

I want to sort by <id> and  print node name of all the children of the
<parent>. If there are consecative nodes with the same node name then node
name should be printed once   and print "same" for the rest.

In the intended o/p is

typeA
typeB
same
typeC

I used following xsl and it did't work.
It prints

typeA
typeB
typeB
typeC

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
	<xsl:output method="xml" indent="yes"/>
	<xsl:template match="/">
		<xsl:apply-templates select="parent/*">
			<xsl:sort select="id"/>
		</xsl:apply-templates>
	</xsl:template>
	<xsl:template match="typeA">
		<xsl:choose>
			<xsl:when
test="self::node()[name(preceding-sibling::*)!= name()]">
				Type A
			</xsl:when>
			<xsl:otherwise>
				Same
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="typeB">
		<xsl:choose>
			<xsl:when
test="self::node()[name(preceding-sibling::*)!= name()]">
				Type B
			</xsl:when>
			<xsl:otherwise>
				Same
			</xsl:otherwise>
		</xsl:choose>	
	</xsl:template>
	<xsl:template match="typeC">
		<xsl:choose>
			<xsl:when
test="self::node()[name(preceding-sibling::*)!= name()]">
				Type C
			</xsl:when>
			<xsl:otherwise>
				Same
			</xsl:otherwise>
		</xsl:choose>	
	</xsl:template>
</xsl:stylesheet>


Thank you,
Satish











-----Original Message-----
From: Mark Swardstrom
To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
Sent: 4/26/01 6:37 PM
Subject: RE:  Sorting & Grouping

Then try:

	<xsl:template match="parent">
		<html>
			<body>
				<pre>
				<xsl:apply-templates select="child">
					<xsl:sort select="emp_id"/>
					<xsl:sort select="name"/>
				</xsl:apply-templates>
				</pre>
			</body>
		</html>
	</xsl:template>

	
	<xsl:template match="child">
		<xsl:choose>
			<xsl:when
test="self::node()[not(preceding-sibling::*/emp_id = emp_id)]/emp_id">
				<xsl:value-of select="emp_id"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:text> </xsl:text>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:text> </xsl:text>
		<xsl:value-of select="name"/>
		<xsl:text>&#xA;</xsl:text>
	</xsl:template>
	


-----Original Message-----
From: Satish Patil [mailto:Satish.Patil@xxxxxxx]
Sent: Thursday, April 26, 2001 3:06 PM
To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
Subject: RE:  Sorting & Grouping


 John,

 Thank you for the help.

 But I don't want to print <emp_id> that are repeated.

 -Satish




-----Original Message-----
From: John Wang
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Sent: 4/26/01 5:55 PM
Subject: RE:  Sorting & Grouping

Try this. I am not sure it is good enough.

<?xml version='1.0' encoding='utf-8' ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output
method="html"/>

	<xsl:template match="parent">
		<html>
			<body>
				<xsl:apply-templates select="child">
					<xsl:sort select="emp_id"/>
					<xsl:sort select="name"/>
				</xsl:apply-templates>
			</body>
		</html>
	</xsl:template>
  <xsl:template match="child">
    <xsl:value-of select="emp_id"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="name"/> <br />
  </xsl:template>
</xsl:stylesheet>


-John

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Satish Patil
Sent: Thursday, April 26, 2001 3:15 PM
To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
Subject:  Sorting & Grouping

Hi All,

I need help in sorting & grouping.

I have a XML
<parent>
        <child>
                <name>AAAA</name>
                <emp_id>1</emp_id>
        </child>
        <child>
                <name>BBBBB</name>
                <emp_id>3</emp_id>
        </child>
        <child>
                <name>CCCC</name>
                <emp_id>2</emp_id>
        </child>
        <child>
                <name>DDDDD</name>
                <emp_id>2</emp_id>
        </child>
</parent>

How to  write an XSL that sorts & groups according to <emp_id>. The
intended
O/P is

1 AAAA
2 CCCC
  DDDD
3 BBBB

Thank you in advance.

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



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

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

 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

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.