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