[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Outputting closing HTML table tags conditionally

Subject: Re: Outputting closing HTML table tags conditionally
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sat, 29 Nov 2003 18:29:15 -0500
xslt table tags
At 2003-11-29 14:35 -0800, Mark Jordan wrote:
I am having trouble understanding how to output closing HTML tags

Yes, that is because you have been misled. XSLT is *not* an "angle-bracket processor" it is a "node-tree processor" ... you have to think nodes, not tags. You are approaching the solution improperly by trying to "output closing HTML tags", because doing so is not possible in XSLT.


Since you need to express all of your expected output as nodes in your stylesheet, your stylesheet is in XML. Thus, your stylesheet needs to be well-formed. Therefore, you cannot plan your algorithm to just output end tags, because end tags are not nodes, they will be created by the processor when emitting nodes, but they are not part of your input. They happen to be in your input syntax because they *describe* nodes, but they are *not* your input ... the nodes they describe are your input.

So, inside your <xsl:if> you will have to represent entire nodes (using start and end tags) in a well-formed fashion, and the processor will build the output using these nodes and when serializing these nodes to the result file will give you the necessary start and end tags or empty tags as required.

My stylesheet (with XML declaration, <xsl:output> and root template XSL ommitted) is:

You will have to change your algorithm to the following:


 <table>
   <xsl:for-each select="image">
     <xsl:if test="position() mod 4 = 0">
       <tr>
        <xsl:for-each select=". | following-sibling::image[1] |
                              following-sibling::image[2] |
                              following-sibling::image[3]">
           <td><!--stuff for each iamge--></td>
        </xsl:for-each>
      </tr>
    </xsl:if>
  </xsl:for-each>
 </table>

You can see how the above is well-formed.

Anybody have any suggestions? All I want to do is output '</tr></table><table><tr>' within xsl:if.

But that would not be well-formed. If you stop thinking about tags and think instead about nodes, the solution should come to you.


I hope the above helps.

................... Ken

--
Next public European delivery:  3-day XSLT/2-day XSL-FO 2004-01-??
Instructor-led on-site corporate, government & user group training
for XSLT and XSL-FO world-wide:  please contact us for the details

G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
ISBN 0-13-065196-6                       Definitive XSLT and XPath
ISBN 0-13-140374-5                               Definitive XSL-FO
ISBN 1-894049-08-X   Practical Transformation Using XSLT and XPath
ISBN 1-894049-11-X               Practical Formatting Using XSL-FO
Member of the XML Guild of Practitioners:     http://XMLGuild.info
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc


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



Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.