xsl-list
[Top] [All Lists]

Re: XSLT Problem - Random Order

2003-10-06 01:56:03
Hi Saurabh,
  From your problem description, it seems that *there
should not be <xsl:choose & <xsl:when* . In your XSL,
xsl:choose does not have any effect when you are doing
xsl:for-each. If you want to see c3 first or c2 first,
then it seems you should hardcode the order in the
XSL(as I have written in my XSL). I feel you should
also not do <xsl:for-each select="//book"> . I feel
<xsl:for-each select="book"> is better that //book. a
// construct searches the XML to arbitrary depths,
which is inefficient. Also, in my opinion,  a
xsl:for-each is not required for this problem..

Below is the complete 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">
        <tr>
         <td align="center">
          <xsl:value-of select="books/book[(_at_)category =
'c3']/title"/>
         </td>
         <td align="center">
           <xsl:value-of select="books/book[(_at_)category =
'c3']/auth"/>
         </td>
        </tr>
        <tr>
          <td align="center">
           <xsl:value-of select="books/book[(_at_)category =
'c1']/title"/>
          </td>
          <td align="center">
            <xsl:value-of select="books/book[(_at_)category =
'c1']/auth"/>
          </td>
        </tr>
        <tr>
          <td align="center">
           <xsl:value-of select="books/book[(_at_)category =
'c2']/title"/>
          </td>
          <td align="center">
           <xsl:value-of select="books/book[(_at_)category =
'c2']/auth"/>
          </td>
        </tr>
   </table>
 </body>
 </html>
</xsl:template>
</xsl:stylesheet>

Hope I understood the problem correctly.

Regards,
Mukul


--- Saurabh Sinha <i_am_saurabhsinha(_at_)yahoo(_dot_)co(_dot_)in>
wrote:
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



__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

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



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