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

RE: XSLT Problem - Random Order

Subject: RE: XSLT Problem - Random Order
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 6 Oct 2003 19:59:43 +0100
xsl random order of elements
> But I want to select the category at random order not
> as ascending or descending order. 

You're not being very clear. I suspect that when you say "random" order
you actually mean "arbitrary" order - i.e. you want to control the
sequence from your stylesheet, rather than having the elements displayed
in an unpredictable sequence.

The simplest way to do this is with something like:

<xsl:apply-templates select="//book[@category='c4']"/>
<xsl:apply-templates select="//book[@category='c2']"/>
<xsl:apply-templates select="//book[@category='c1']"/>
<xsl:apply-templates select="//book[@category='c5']"/>
<xsl:apply-templates select="//book[@category='c3']"/>

Or you could use keys to make it more efficient.

Micahel Kay

> Suppose there are 6 categories in 
> 
> books.xml file. Now I want to select only 3 categories
> in ouput file ( e.g in html) and their position will
> be different - 
> 
> such as 4th (category="c4" in xml doc) will come at
> 1st position (in html doc), 6th (category="c6" in xml
> doc) will come at 
> 
> 2nd position (in html doc) and 2nd (category="c2" in
> xml doc) will come at 3rd position(in html doc).
> 
> 
> books.xml
> ----------
> 
> <?xml version="1.0"?>
> <books>
> 	<book category="c1">
> 		<title>1st Book</title>
> 		<auth>Author 1</auth>
> 	</book>
> 
> 	<book category="c2">
> 		<title>2nd Book</title>
> 		<auth>Author 2</auth>
> 	</book>
> 	<book category="c3">
> 		<title>3rd Book</title>
> 		<auth>Author 3</auth>
> 	</book>
> 	<book category="c4">
> 		<title>4th Book</title>
> 		<auth>Author 4</auth>
> 	</book>
> 	<book category="c5">
> 		<title>5th Book</title>
> 		<auth>Author 5</auth>
> 	</book>
> 	<book category="c6">
> 		<title>6th Book</title>
> 		<auth>Author 6</auth>
> 	</book>
> </books>
> 
> 
> 
> books.xsl
> ----------
> 
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 
> 	<xsl:template match="/">
> 		<html>
> 			<head>
> 			</head>
> 			<body>
> 				<table border="1" width="60%" 
> align="center" cellpadding="0">
> 					<xsl:apply-templates/>
> 				</table>
> 			</body>
> 		</html>
> 	</xsl:template>
> 
> 
> 	<xsl:template match="books">
> 		<xsl:for-each select="//book">
> 
> 
> 			<xsl:choose>
> 
> 				<xsl:when test="@category='c4'">
> 
> 					<tr>
> 						<td align="center">
> 							
> <xsl:value-of select="title"/>
> 						</td>
> 						<td align="center">
> 							
> <xsl:value-of select="auth"/>
> 						</td>
> 					</tr>
> 				</xsl:when>
> 
> 
> 				<xsl:when test="@category='c6'">
> 
> 					<tr>
> 						<td align="center">
> 							
> <xsl:value-of select="title"/>
> 						</td>
> 						<td align="center">
> 							
> <xsl:value-of select="auth"/>
> 						</td>
> 					</tr>
> 				</xsl:when>
> 
> 
> 				<xsl:when test="@category='c2'">
> 					<tr>
> 						<td align="center">
> 							
> <xsl:value-of select="title"/>
> 						</td>
> 						<td align="center">
> 							
> <xsl:value-of select="auth"/>
> 						</td>
> 					</tr>
> 				</xsl:when>
> 			</xsl:choose>
> 		</xsl:for-each>
> 	</xsl:template>
> </xsl:stylesheet>
> 
> 
> 
> books.html
> ----------
> 
> Current Output
> --------------
> 
> 
> Category		Author
> --------		-------
> 
> 2nd Book		Author 2
> 
> 4th Book		Author 4
> 
> 6th Book		Author 6
> 
> 
> Expected Output 
> ---------------
> 
> 
> Category		Author
> --------		-------
> 
> 4th Book		Author 4
> 
> 6th Book		Author 6
> 
> 2nd Book		Author 2
> 
> 
> 
> Regards,
> 
> Saurabh Sinha
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>  --- Michael Kay <mhk@xxxxxxxxx> wrote: > You haven't
> said what criteria you want to use for
> > sorting - is it
> > descending order by category name, or what?
> > 
> > You could get the order c3, c2, c1, by adding
> > 
> > <xsl:sort select="@category" order="descending"/>
> > 
> > immediately after the <xsl:for-each>
> > 
> > You have an xsl:choose with three branches, but they
> > are all the same.
> > This makes it very difficult to understand what
> > exactly you are trying
> > to achieve.
> > 
> > Michael Kay
> > 
> > 
> > > -----Original Message-----
> > > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On
> > Behalf Of
> > > Saurabh Sinha
> > > Sent: 06 October 2003 08:13
> > > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> > > Subject:  XSLT Problem - Random Order
> > > 
> > > 
> > > Hi,
> > > 
> > > Currently I am facing the following problem while converting 
> > > documents into HTML from XML. I need
> > help
> > > to solve this.
> > > 
> > > 
> > > Thanks,
> > > 
> > > Saurabh
> > > 
> > > 
> > > Problem:
> > > 
> > > I want to see the output of books.xml file as
> > category
> > > wise. In books.xml 3 categories are given c1, c2,
> > c3
> > > within book elements. I want to see either c3
> > first or
> > > c2 first in html output. But everytime it is
> > coming as
> > > per .xml document. I am writing the books.xml,
> > > books.xsl below. Can you suggest me what specific
> > > command I have to give in .xsl document.
> > > 
> > > 
> > > books.xml
> > > ----------
> > > 
> > > <?xml version="1.0"?>
> > > <books>
> > > 	<book category="c1">
> > > 		<title>ABC</title>
> > > 		<auth>XX</auth>
> > > 	</book>
> > > 
> > > 	<book category="c2">
> > > 		<title>SSS</title>
> > > 		<auth>YY</auth>
> > > 	</book>
> > > 	<book category="c3">
> > > 		<title>MNB</title>
> > > 		<auth>ZZ</auth>
> > > 	</book>
> > > </books>
> > > 
> > > 
> > > books.xsl
> > > ------------
> > > 
> > > <?xml version="1.0"?>
> > > <xsl:stylesheet version="1.0"
> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> > > 
> > > 	<xsl:template match="/">
> > > 		<html>
> > > 			<head>
> > > 			</head>
> > > 			<body>
> > > 				<table border="1" width="60%"
> > > align="center" cellpadding="0">
> > > 					<xsl:apply-templates/>
> > > 				</table>
> > > 			</body>
> > > 		</html>
> > > 	</xsl:template>
> > > 
> > > 
> > > 	<xsl:template match="books">
> > > 		<xsl:for-each select="//book">
> > > 
> > > 			<xsl:choose>
> > > 
> > > 				<xsl:when test="@category='c3'">
> > > 
> > > 					<tr>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="title"/>
> > > 						</td>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="auth"/>
> > > 						</td>
> > > 					</tr>
> > > 				</xsl:when>
> > > 
> > > 
> > > 				<xsl:when test="@category='c1'">
> > > 
> > > 					<tr>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="title"/>
> > > 						</td>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="auth"/>
> > > 						</td>
> > > 					</tr>
> > > 				</xsl:when>
> > > 
> > > 					
> > > 					<xsl:when test="@category='c2'">
> > > 					<tr>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="title"/>
> > > 						</td>
> > > 						<td align="center">
> > > 							
> > > <xsl:value-of select="auth"/>
> > > 						</td>
> > > 					</tr>
> > > 				</xsl:when>
> > > 
> > > 			</xsl:choose>
> > > 		</xsl:for-each>
> > > 	</xsl:template>
> > > </xsl:stylesheet>
> > > 
> > > 
> > > 
> > > 
> > > books.html
> > > ----------
> > > 
> > > Current Output
> > > --------------
> > > 
> > > 
> > > Category		Author
> > > --------		-------
> > > 
> > > ABC			XX
> > > 
> > > SSS			YY
> > > 
> > > MNB			ZZ
> > > 
> > > 
> > > Expected Output
> > > ---------------
> > > 
> > > Category		Author
> > > --------		-------
> > > 
> > > MNB			ZZ
> > > 
> > > ABC			XX
> > > 
> > > SSS			YY
> > > 
> > > 
> > >
> >
> ______________________________________________________________
> > > __________
> > > Yahoo! India Matrimony: Find your partner online.
> > > Go to http://yahoo.shaadi.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
> >  
> 
> ______________________________________________________________
> __________
> Yahoo! India Matrimony: Find your partner online.
> Go to http://yahoo.shaadi.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

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.