468,505 Members | 1,648 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,505 developers. It's quick & easy.

xsl:if and nested td tag problem

I'm using XSL to transform an XML document to HTML, however I'm encountering
the following problem.I want to test a couple of values using an xsl:if
statement and then print a couple of HTML tags only when the condition is
met:

<xsl:if test="position() = $countPar">

</td>

<td width="50%" valign="top">

</xsl:if>

However, the parser takes offence at the td closing tag following an xsl:if
opening tag. What do I do?

Thanks

Steven
Nov 11 '05 #1
3 3114
Steven wrote:
I've got a number of elements that each contain a paragraph of text, I want
to put that text into 2 columns of a HTML table, half the paragraphs in one
column, half in the other. So I loop through the paragraph elements (using
xsl:for-each), outputting each one in turn. When I'm on the middle element I
want to output HTML that will close the tag for the current cell and start
the new cell (or column). After that I just output the rest of paragraph
elements. So what I've been trying is to use an xsl:if statement in the
middle of the xsl:for-each to see if I'm on the middle element and then
creating the new cell at that point.

Well, again, you can't program in XSLT as in C or Java, it's not imperative
procedural language. You have to learn to think in a declarative way.
So instead of processing paragraph and closing/opening cells XSLT requires you
just to declare that you want two cells, half of text in one and the rest in
the second.
Why don't you post an example of you XML and the desired result?
--
Oleg Tkachenko
http://www.tkachenko.com/blog
Multiconn Technologies, Israel

Nov 11 '05 #2
Yeah, see what you mean. This is my first stab at XSL and I'm still not
certain of what it is and isn't capable of. Now that you've confirmed that
this won't be possible, and suggested the correct way of considering the
problem I've found a solution - to do the loop twice, once in each cell. In
the first cell I'll check that the element number is less that half of the
total number of elements, and in the second cell that only those elements
over half way through the total are output. Simple.

Thanks for your help Oleg.

Steven
Nov 11 '05 #3
Steven wrote:
Yeah, see what you mean. This is my first stab at XSL and I'm still not
certain of what it is and isn't capable of. Now that you've confirmed that
this won't be possible, and suggested the correct way of considering the
problem I've found a solution - to do the loop twice, once in each cell. In
the first cell I'll check that the element number is less that half of the
total number of elements, and in the second cell that only those elements
over half way through the total are output. Simple.

Yes, but not really effective. Try something like this: consider the following
XML fragment:
<foo>
<para>text1</para>
<para>text2</para>
<para>text3</para>
<para>text4</para>
</foo>

Then to split para elements into 2 cells:
<xsl:template match="foo">
<xsl:variable name="size" select="count(para)"/>
<td>
<xsl:apply-templates select="para[position() &lt;= $size div 2]"/>
</td>
<td>
<xsl:apply-templates select="para[position() > $size div 2]"/>
</td>
</xsl:template>

--
Oleg Tkachenko
http://www.tkachenko.com/blog
Multiconn Technologies, Israel

Nov 11 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Steven | last post: by
9 posts views Thread by Andrea Maschio | last post: by
2 posts views Thread by Jørn Tommy Kinderås | last post: by
3 posts views Thread by Eric Theil | last post: by
2 posts views Thread by websls | last post: by
5 posts views Thread by Luke Vogel | last post: by
4 posts views Thread by Doulos05 | last post: by
4 posts views Thread by grbeal | last post: by
reply views Thread by NPC403 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.