RE: [xsl] XSLT Problem - Random Order

Subject: RE: [xsl] XSLT Problem - Random Order
From: Saurabh Sinha <i_am_saurabhsinha@xxxxxxxxxxx>
Date: Mon, 6 Oct 2003 11:01:39 +0100 (BST)
Hi,

Thanks for your mail. What you have mentioned about
ascending/descending order that thing I know. If I
write the statement 

<xsl:sort select="@category" order="descending"/> then
ouput will come as category 6, 5 , 4, 3......

For ascending it will come as category c1, c2,
c3.......

But I want to select the category at random order not
as ascending or descending order. 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: [xsl] 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


Current Thread