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[(_at_)category='c4']"/>
<xsl:apply-templates select="//book[(_at_)category='c2']"/>
<xsl:apply-templates select="//book[(_at_)category='c1']"/>
<xsl:apply-templates select="//book[(_at_)category='c5']"/>
<xsl:apply-templates select="//book[(_at_)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(_at_)mhk(_dot_)me(_dot_)uk> 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(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On
Behalf Of
Saurabh Sinha
Sent: 06 October 2003 08:13
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list