Altova Mailing List Archives


[xsl] Outputing tables on the fly (Was incrementing mid-stream part 4) - [Long: XML/XSL samples included]

From: "Durston, Andrew (AGRE)" <andrew.durston@-------------------->
To:
Date: 4/19/2004 6:59:00 AM
Andreas,

Many thanks for your (and everyone's) help to date. Am including truncated sections of the XML (it is from a requirements database tool, DOORS, which outputs every object, which has many attributes, as an XML object (doorsobject). even individual table cells have their own object) and one sample XSL processing loop. The usual caveats about this probably being lousy code (haven't coded in years and new to XSL to boot). We are taking the XML file and generating HTML documents from it.

I have included 5 objects, the first not a table and the other 4 make a small table... I need to go throught the loop processing paragraphs and tables as they occur. Wasn't sure whether one can build a table cell by cell or better to output all at once (my first thought) hence needing to gather all objects in that particular table. Anyhoo, I am rambling, here's the XML then the XSL --

<test-plan>
<doorsobject>
	<objectlevel>5</objectlevel>
	<objectnumber>1.2.2.2.0-2</objectnumber>
	<objecttext>Requirements text info.</objecttext>
	<tabletype>TableNone</tabletype>
</doorsobject>
<doorsobject>
	<objectlevel>8</objectlevel>
	<objectnumber>1.2.2.2.0-2.0-1.0-1.0-1</objectnumber>
	<objecttext>Cell 1-1</objecttext>
	<tabletype>TableCell</tabletype>
	<tablecell>
		<tablecellrow>1</tablecellrow>
		<tablecellcol>1</tablecellcol>
		<tablenumrows>2</tablenumrows>
		<tablenumcols>2</tablenumcols>
	</tablecell>
</doorsobject>
<doorsobject>
	<objectlevel>8</objectlevel>
	<objectnumber>1.2.2.2.0-2.0-1.0-1.0-2</objectnumber>
	<objecttext>Cell 1-2</objecttext>
	<tabletype>TableCell</tabletype>
	<tablecell>
		<tablecellrow>1</tablecellrow>
		<tablecellcol>2</tablecellcol>
		<tablenumrows>2</tablenumrows>
		<tablenumcols>2</tablenumcols>
	</tablecell>
</doorsobject>
<doorsobject>
	<objectlevel>8</objectlevel>
	<objectnumber>1.2.2.2.0-2.0-1.0-2.0-1</objectnumber>
	<objecttext>Cell 2-1</objecttext>
	<tabletype>TableCell</tabletype>
	<tablecell>
		<tablecellrow>2</tablecellrow>
		<tablecellcol>1</tablecellcol>
		<tablenumrows>2</tablenumrows>
		<tablenumcols>2</tablenumcols>
	</tablecell>
</doorsobject>
<doorsobject>
	<objectlevel>8</objectlevel>
	<objectnumber>1.2.2.2.0-2.0-1.0-2.0-2</objectnumber>
	<objecttext>Input Condition</objecttext>
	<tabletype>TableCell</tabletype>
	<tablecell>
		<tablecellrow>2</tablecellrow>
		<tablecellcol>2</tablecellcol>
		<tablenumrows>2</tablenumrows>
		<tablenumcols>2</tablenumcols>
	</tablecell>
</doorsobject>
</test-plan>

<xsl:for-each select="test-plan/doorsobject">
<xsl:if test='contains(objectnumber,"1.2.2.")'>
	<!-- If object level 4, then test header -->
	<xsl:if test='contains(objectlevel,"4")'>
		<h4>[Test case]
		<xsl:value-of select="concat(objectnumber,' ')"/>
		<xsl:value-of select="objectheading"/>
		</h4>
	</xsl:if>
	<!-- If object level 5 or greater, then test paragraph or table itself -->
	<xsl:if test='objectlevel &gt; 4'>
		<!-- if not a table entry, process like a paragraph -->
		<xsl:if test="contains(tabletype,'TableNone')">
			<p>
			[Am in loop for Test cases]
			<xsl:value-of select="objecttext"/>
			</p>
		</xsl:if>
		<!-- If a table entry, check to see if first table entry, then process entire table, if not, ignore them -->
		<xsl:if test="contains(tabletype,'TableCell')">
			<xsl:if test="tablecell/tablecellrow &lt; 2">
				<xsl:if test="tablecell/tablecellcol &lt; 2">
					<p>Found a table beginning</p>
					<table border="1">
					<!-- the first row is for .0-1.0-1. -->
					<!-- Here is where I want to output the entire table, printing objecttext, in rows/cols -->
					<!-- tablenumcols and tablenumrows being maxs, tablecellrow and tablecellcol being positions -->
					<xsl:for-each select=""> <!-- a row -->
						<tr>
						<xsl:for-each select=""> <!-- a column -->
							<td>
							<xsl:copy-of select="objecttext"/>
							</td>
						</xsl:for-each>
						</tr>
					</xsl:for-each>
					</tr>
					</table>
					<p>end of table for <xsl:value-of select="objecttext"/>
					</p>
				</xsl:if>
			</xsl:if>
		</xsl:if>
	</xsl:if>
</xsl:if>
</xsl:for-each>

Regards,
Andrew

Andrew C. Durston
Smiths Aerospace
Electronic Systems - Grand Rapids
616.241.8715
andrew.durston@xxxxxxxxxxxxxxxxxxxx



</table> </Pre>
<HTML>
<br>
<br>
************************************************<br>
The information contained in, or attached to, this e-mail, may contain confidential information and is intended solely for the use of the individual or entity to whom they are addressed and may be subject to legal privilege.  If you have received this e-mail in error you should notify the sender immediately by reply e-mail, delete the message from your system and notify your system manager.  Please do not copy it for any purpose, or disclose its contents to any other person.  The views or opinions presented in this e-mail are solely those of the author and do not necessarily represent those of the company.  The recipient should check this e-mail and any attachments for the presence of viruses.  The company accepts no liability for any damage caused, directly or indirectly, by any virus transmitted in this email.<br>
************************************************<br>
</HTML>

Disclaimer

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.