Subject: [xsl] Transforming XML to HTML Table From: "Nick Foster" <Nick.Foster@xxxxxxxxxxx> Date: Wed, 29 Jan 2003 12:00:03 -0000 |
Hi, This might be a bit of a newbie's question but I can't find the answer anywhere.... I have an ASP.NET page with an XML webcontrol on it, to which I pass an XML document and an XSLT document. I am trying to transform the data in the XML document into an HTML table. The XML is in the following format: <report> <performance> <summary> ..... </summary> <data> <row> <datetime>01/01/2003 00:00</datetime> <sample> <label>sample 1</label> <displayval>0.001</displayval> </sample> <sample> <label>Sample 2</label> <displayval>0.345</displayval> </sample> <sample> <label>Sample 3</label> <displayval>0.763</displayval> </sample> </row> <row> <datetime>01/01/2003 00:30</datetime> <sample> <label>sample 3</label> <displayval>0.694</displayval> </sample> <sample> <label>Sample 1</label> <displayval>0.002</displayval> </sample> <sample> <label>Sample 2</label> <displayval>0.348</displayval> </sample> </row> </data> </performance> </report> For each report the same samples are present in each row, but the samples vary in number and label between reports. I need to create an HTML table from each report where each <row> is a row in the table, and the samples in each row are the columns in that row i.e. <TABLE> <TR> <TH>Date & Time</TH> <TH>Sample 1</TH> <TH>Sample 2</TH> <TH>Sample 3</TH> </TR> <TR> <TD>01/01/2003 00:00</TD> <TD>0.001</TD> <TD>0.345</TD> <TD>0.763</TD> </TR> <TR> <TD>01/01/2003 00:30</TD> <TD>0.002</TD> <TD>0.348</TD> <TD>0.694</TD> </TR> </TABLE> I have created the table header row by getting the first row of data and puting it in a variable. Each sample/label is then written out in a <TH></TH> tag. <xsl:template match="/report/performance/data"> <!-- Get the column headers from the first data row. --> <xsl:variable name="columntitles" select="row[1]/sample" /> <!-- Create the table header --> <TABLE border="1" cellspacing="2" cellpadding="1" width="100%"> <TR class="reportheader"> <TH>DateTime</TH> <xsl:for-each select="$columntitles"> <TH><xsl:value-of select="label"/></TH> </xsl:for-each> </TR> Now I need to loop through each row writing out the <datetime> value and each sample/displayval. The problem I have is that the samples aren't always in the same order in each row, so I need to select each sample in the same order that they appear in the header row. This is where I am stuck :( How can I select the samples in the same order in which they appear in the $columntitles variable? I tried the following: <!-- Write out each row of samples --> <xsl:for-each select="row"> <xsl:variable name="samples" select="sample"/> <TR> <TD><xsl:value-of select="datetime"/></TD> <xsl:for-each select="$columntitles"> <TD><xsl:value-of select="$samples[./label=$columntitles/label]/displayval"/></TD> </xsl:for-each> </TR> </xsl:for-each> but I only got the value of the first sample in all columns. Is there a way of looping through the $columntitles/labels and selecting the sample where the label matches in the current row? Many thanks, Nick XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: XSL frustration (was: Re: [xsl], S Woodside | Thread | Re: [xsl] Transforming XML to HTML , Oleg Tkachenko |
Re: [xsl] sax or dom in XSLT proces, Oleg Tkachenko | Date | Re: [xsl] Transforming XML to HTML , Oleg Tkachenko |
Month |