[xsl] Table styling

Subject: [xsl] Table styling
From: "ajay sinha" <sinhajay@xxxxxxxxxxx>
Date: Thu, 14 Feb 2002 14:28:22
My Xml is like this.
<findForMe>
<community>
<community_type>my Care</community_type>
<services>
<service>
<service_id>8</service_id>
<service_type>asd</service_type>
<care_types>
<care_type_desc id="4">SCHOOLS</care_type_desc>
<provtype>
<provtype_id>115</provtype_id>
<provtype_type>as Schools</provtype_type>
</provtype>
<provtype>
<provtype_id>116</provtype_id>
<provtype_type>xxSchools</provtype_type>
</provtype>
<provtype>
<provtype_id>114</provtype_id>
<provtype_type>wa Schools</provtype_type>
</provtype>
<provtype>
<provtype_id>117</provtype_id>
<provtype_type>Schoolxdc</provtype_type>
</provtype>
</care_types>
</service>
</services>
<services>
<service>
<service_id>1</service_id>
<service_type>ghghg</service_type>
<care_types>
<care_type_desc id="10">ghgg</care_type_desc>
<provtype>
<provtype_id>73</provtype_id>
<provtype_type>ff Agencies</provtype_type>
</provtype>
<provtype>
<provtype_id>74</provtype_id>
<provtype_type>ty Agencies</provtype_type>
</provtype>
</care_types>
</service>
</services>
<services>
<service>
<service_id>2</service_id>
<service_type>fix Care</service_type>
<care_types>
<care_type_desc id="3">dCAMPS</care_type_desc>
<provtype>
<provtype_id>10</provtype_id>
<provtype_type>reCamps</provtype_type>
</provtype>
<provtype>
<provtype_id>9</provtype_id>
<provtype_type>dt Camps</provtype_type>
</provtype>
</care_types>
<care_types>
<care_type_desc id="1">bnCARE</care_type_desc>
<provtype>
<provtype_id>2</provtype_id>
<provtype_type> bb Care Center</provtype_type>
</provtype>
<provtype>
<provtype_id>1</provtype_id>
<provtype_type>bbCare Home</provtype_type>
</provtype>
</care_types>
<care_types>
<care_type_desc id="2">IN HOME</care_type_desc>
<provtype>
<provtype_id>5</provtype_id>
<provtype_type>Au Pair Agency</provtype_type>
</provtype>
<provtype>
<provtype_id>7</provtype_id>
<provtype_type>Home Health Care Agencies</provtype_type>
</provtype>
<provtype>
<provtype_id>6</provtype_id>
<provtype_type>In Home Agencies</provtype_type>
</provtype>
</care_types>
</service>
</services>
<services>
<service>
<service_id>7</service_id>
<service_type>sss Needs</service_type>
<care_types>
<care_type_desc id="3">CAMPS</care_type_desc>
<provtype>
<provtype_id>10</provtype_id>
<provtype_type>Day Camps</provtype_type>
</provtype>
<provtype>
<provtype_id>9</provtype_id>
<provtype_type>Residential Camps</provtype_type>
</provtype>
</care_types>
<care_types>
<care_type_desc id="1">DAY CARE</care_type_desc>
<provtype>
<provtype_id>2</provtype_id>
<provtype_type>Child Care Center</provtype_type>
</provtype>
<provtype>
<provtype_id>1</provtype_id>
<provtype_type>Family Child Care Home</provtype_type>
</provtype>
</care_types>
<care_types>
<care_type_desc id="2">IN HOME</care_type_desc>
<provtype>
<provtype_id>5</provtype_id>
<provtype_type>Au Pair Agency</provtype_type>
</provtype>
<provtype>
<provtype_id>7</provtype_id>
<provtype_type>Home Health Care Agencies</provtype_type>
</provtype>
<provtype>
<provtype_id>6</provtype_id>
<provtype_type>In Home Agencies</provtype_type>
</provtype>
</care_types>
</service>
</services>
</community>
</communities>
</findForMe>


My xsl is as follows

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="html"/>



<xsl:template match="*|/"><xsl:apply-templates/></xsl:template>

<xsl:template match="text()|@*"><xsl:value-of select="."/></xsl:template>

<xsl:template match="/">
<table width="624" >
<tr>
<td>
<form name="find4meForm" action="index.html?function=getFindForMeQuestions.html" method="post">
<input type="hidden" name="serviceid" /><br/>
<span class="hed1">Search with Our Help</span><br/><br/>
<span class="ctrtxtfont2">
Use this feature to search for the provider or resource you need from the categories below.
</span> <br/><br/>


	<xsl:apply-templates select="findForMe/communities/community "/><br/>
	<input type="image" src="/art/questium/btn_next.gif" border="0"/>
	</form>
   </td>
 </tr>
</table>
</xsl:template>

<xsl:template match="community">

<table width="100%" cellpadding="0" cellspacing="0" border="0" class="ctrbakbdr" >
<tr class="ctrbakbdr" > <td colspan="3" class="ctrbakhed1"><span class="ctrtxtbold">
<xsl:value-of select="community_type"/></span></td></tr>
<xsl:variable name="cols" select="3"/>
<xsl:variable name="all_services" select="services"/>
<!-- start a new data row for every 1st, 4th, 7th, etc. 'services' element -->
<xsl:for-each select="$all_services[position() mod $cols = 1]">
<xsl:variable name="this_services_pos" select="position()"/>
<xsl:variable name="current_row_services" select="$all_services[position() &gt;= $this_services_pos and position() &lt; $this_services_pos + $cols]"/>
<!-- go generate the 2 table rows for this one data row -->
<xsl:call-template name="make_table_rows">
<xsl:with-param name="cols" select="$cols"/>
<xsl:with-param name="current_row_services" select="$current_row_services"/>
</xsl:call-template>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template name="make_table_rows">
<xsl:param name="cols" select="1" />
<xsl:param name="current_row_services" select="/.." />
<!-- selects above are defaults in case nothing was passed in -->
<xsl:if test="$current_row_services">
<xsl:variable name="num_empty_cols" select="$cols - $current_row_services"/>
<tr class="ctrbakhed2">
<xsl:for-each select="$current_row_services">


<td width="33%" class="ctrbakbdr" ><xsl:apply-templates select="service" mode="myservice"/></td>


<xsl:if test="$num_empty_cols=1"> <td class="ctrbakbdr">&#160;</td> </xsl:if> <xsl:if test="$num_empty_cols=2"> <td class="ctrbakbdr">&#160;</td> <td class="ctrbakbdr">&#160;</td> </xsl:if> </xsl:for-each> </tr> <tr> <xsl:for-each select="$current_row_services"> <td width="33%" valign="top" class="ctrbakbdr"> <xsl:apply-templates select="service" mode="care_type"/> </td> </xsl:for-each> <xsl:if test="$num_empty_cols=1"> <td class="ctrbakbdr">&#160;</td> </xsl:if> <xsl:if test="$num_empty_cols=2"> <td class="ctrbakbdr">&#160;</td> <td class="ctrbakbdr">&#160;</td> </xsl:if> </tr> </xsl:if> </xsl:template> <!-- <xsl:template name="make_empty_cells"> <xsl:with-param name="num_empty_cols" select="0" /> <xsl:if test="num_empty_cols"> <td>&#160;</td> <xsl:call-template name="make_empty_cells"> <xsl:with-param name="num_empty_cols" select="num_empty_cols-1"/> </xsl:call-template> </xsl:if> </xsl:template> -->

<xsl:template match="service" mode="myservice">

		 <span class="ctrtxtfont2">
		<xsl:value-of select="service_type"/>
		 </span>

</xsl:template>
<xsl:template match="service" mode="care_type">

		 <span class="ctrtxtfont3">
		<xsl:apply-templates select="care_types" mode="quicksearch"/>
		 </span>

</xsl:template>

<xsl:template match="care_types" mode="quicksearch">
<span class="ctrtxtfont3bold"><xsl:value-of select="care_type_desc"/></span>
<br />
<xsl:for-each select="provtype">
<input type="radio" name="provtypeid" value="{provtype_id}" onClick="document.forms[1].serviceid.value='{../../service_id}'"/>
<span> <xsl:value-of select="provtype_type"/></span><br />
</xsl:for-each>
<p/>
</xsl:template>



</xsl:stylesheet>


As I am rendering table of three colomns,my problem is when I am looping for services to create new row
It creates first row correctly but for second row instead of going to position 4 of services it goes to second position and so on .
Can any one suggest where I am making mistake or correction in Xsl or in code.
I will be thankfull.
thanks in anticipation.
arup




_________________________________________________________________
Join the world?s largest e-mail service with MSN Hotmail. http://www.hotmail.com



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



Current Thread