How to account for optional elements in a table in XSL?

Subject: How to account for optional elements in a table in XSL?
From: Francois Belanger <francois@xxxxxxxxxxx>
Date: Thu, 23 Apr 98 12:38:49 -0400
I'm parsing an XML file which has optional elements. I want to produce a 
table from the rows but need to check for the presence of the optional 
elements and put appropriate empty cells where needed.

The way I found to keep the columns in order is with multiple rules with 
importance attributes and select in actions. It's a bit busy and I'm 
wondering, since this is a problem that often comes up, if it's the best 
way to handle this. 

Here's the simplified XSL rules, for a table with 5 columns, elements 3 4 
optional:

<!-- cell 3 4 missing -->
<rule importance="1">
  <target-element type="row">
  	<element type="cell_1"/>
  	<element type="cell_2"/>
  	<element type="cell_5"/>
   </target-element>
	<TR valign="top">
	<TD>
		<select-elements>
			<target-element type="cell_1"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_2"/>
		</select-elements>
	</TD>
	<TD></TD>
	<TD></TD>	
	<TD  align="right">
		<select-elements>
			<target-element type="cell_5"/>
		</select-elements>
	</TD>
	</TR>
</rule>

<!-- cell  4 missing -->
<rule importance="2">
  <target-element type="row">
  	<element type="cell_1"/>
  	<element type="cell_2"/>
  	<element type="cell_3"/>
  	<element type="cell_5"/>
   </target-element>
	<TR valign="top">
	<TD>
		<select-elements>
			<target-element type="cell_1"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_2"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_3"/>
		</select-elements>
	</TD>
	<TD></TD>	
	<TD  align="right">
		<select-elements>
			<target-element type="cell_5"/>
		</select-elements>
	</TD>
	</TR>
</rule>

<!-- cell 3 missing -->
<rule importance="2">
  <target-element type="row">
  	<element type="cell_1"/>
  	<element type="cell_2"/>
  	<element type="cell_4"/>
  	<element type="cell_5"/>
   </target-element>
	<TR valign="top">
	<TD>
		<select-elements>
			<target-element type="cell_1"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_2"/>
		</select-elements>
	</TD>
	<TD></TD>	
	<TD>
		<select-elements>
			<target-element type="cell_4"/>
		</select-elements>
	</TD>
	<TD  align="right">
		<select-elements>
			<target-element type="cell_5"/>
		</select-elements>
	</TD>
	</TR>
</rule>

<!-- no cell missing -->
<rule importance="3">
  <target-element type="row">
  	<element type="cell_1"/>
  	<element type="cell_2"/>
  	<element type="cell_3"/>
  	<element type="cell_4"/>
  	<element type="cell_5"/>
   </target-element>
	<TR valign="top">
	<TD>
		<select-elements>
			<target-element type="cell_1"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_2"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_3"/>
		</select-elements>
	</TD>
	<TD>
		<select-elements>
			<target-element type="cell_4"/>
		</select-elements>
	</TD>
	<TD  align="right">
		<select-elements>
			<target-element type="cell_5"/>
		</select-elements>
	</TD>
	</TR>
</rule>

Now, this is just a 5 column table with 2 optional cells, imagine if all 
cell elements were optional or more columns were added.

There's got to be a better way... Thanks for any suggestion!




Francois Belanger
Sitepak, Bringing Internet Business into Focus
http://www.sitepak.com



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


Current Thread