xsl-list
[Top] [All Lists]

RE: XSLT Problem - Random Order

2003-10-06 11:59:43
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



<Prev in Thread] Current Thread [Next in Thread>