|
Subject: Making balanced two-column tables from one-column data From: Philip Borenstein <pb@xxxxxxxxxx> Date: Wed, 19 Jan 2000 13:35:12 -0500 |
I have a solution to my problem, but it seems so un-XSLT-like, and ugly that
I'm sure there must be a better solution. i think that part of the problem
is that I just don't "get" XPaths. Pointers to good XPath learning resources
much appreciated.
I have the following XML:
<TASKS>
<TASK>
<COMPONENTS>
<COMPONENT>A</COMPONENT>
<COMPONENT>B</COMPONENT>
<COMPONENT>C</COMPONENT>
<COMPONENT>D</COMPONENT>
<COMPONENT>E</COMPONENT>
<COMPONENT>F</COMPONENT>
<COMPONENT>G</COMPONENT>
<COMPONENT>H</COMPONENT>
<COMPONENT>I</COMPONENT>
<COMPONENT>J</COMPONENT>
<COMPONENT>K</COMPONENT>
</COMPONENTS>
</TASK>
</TASKS>
I want to produce a two-column table like this:
A G
B H
C I
D J
E K
F
(The number of COMPONENTS may or may not be even.)
This is my XSL template for the COMPONENT element:
<xsl:template match="COMPONENTS">
<P>There are <xsl:value-of select="count(COMPONENT)"/> components.</P>
<TABLE>
<xsl:variable name="h" select="round(count(COMPONENT) div 2)" />
<xsl:for-each select="COMPONENT">
<xsl:variable name="p" select="position()" />
<xsl:if test="$h>=$p">
<TR>
<TD><xsl:value-of select="../COMPONENT[position()=$p]"
/></TD>
<TD><xsl:value-of select="../COMPONENT[position()=$p+$h]"
/></TD>
</TR>
</xsl:if>
</xsl:for-each>
</TABLE>
</xsl:template>
This just strikes me as the wrong way to go about it.
--philip borenstein.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| DESIGINING styleshets that act like, Jonathan Asbell | Thread | RE: Making balanced two-column tabl, Mike Brown |
| Re: Oracle XSLProcessor Java calls, Steve Muench | Date | displaying an html non-breaking spa, swright |
| Month |