Sounds easily doable..
If you first create the header inside the <output> element in a first
transformation till you get result below
<?xml version="1.0" encoding="ISO-8859-1" ?>
<output>
<thead>
<tr>
<th>OTCreateDate</th>
<th>OTCreatedByFullName</th>
<th>Score</th>
<th>Attr_4539360_16</th>
<th>Attr_4539360_26</th>
</tr>
</thead>
<SearchResults>
<SearchResult>
<OTCreateDate>2009-10-27</OTCreateDate>
<OTCreatedByFullName>Jean-Philippe Martin</OTCreatedByFullName>
<Score>97</Score>
</SearchResult>
<SearchResult>
<Attr_4539360_16>Nord</Attr_4539360_16>
<Attr_4539360_26>Transférer</Attr_4539360_26>
<OTCreateDate >2007-08-30</OTCreateDate>
<OTCreatedByFullName >Caroline</OTCreatedByFullName>
<Score>94</Score>
</SearchResult>
</SearchResults>
</output>
Next you process the <output> a second time
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:variable name="tableHeaders" select="/output/thead/tr/th" />
<xsl:template match="/">
<xsl:apply-templates select="output" />
</xsl:template>
<xsl:template match="output">
<html>
<body>
<table>
<xsl:apply-templates select="thead" />
<xsl:apply-templates
select="SearchResults" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="SearchResults">
<tbody>
<xsl:apply-templates select="SearchResult" />
</tbody>
</xsl:template>
<xsl:template match="SearchResult">
<xsl:variable name="result" select="." />
<tr>
<xsl:for-each select="$tableHeaders">
<xsl:variable name="header" select="./text()"/>
<td>
<xsl:apply-templates select="$result/*[local-name() =
$header]/text()"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
<!--
copy all nodes and attributes which are not processed by one of
available templates
-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Cheers,
Robby
-----Original Message-----
From: jeanph01 [mailto:jeanph01(_at_)zoho(_dot_)com]
Sent: Wednesday, April 21, 2010 10:19 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] XSLT 1.0 : HTML table with
I want to create a table with xslt 1.0 from an XML source file containing a
varying number of key for each row :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<output>
<SearchResults>
<SearchResult>
<OTCreateDate>2009-10-27</OTCreateDate>
<OTCreatedByFullName>Jean-Philippe Martin</OTCreatedByFullName>
<Score>97</Score>
</SearchResult>
<SearchResult>
<Attr_4539360_16>Nord</Attr_4539360_16>
<Attr_4539360_26>Transférer</Attr_4539360_26>
<OTCreateDate >2007-08-30</OTCreateDate>
<OTCreatedByFullName >Caroline</OTCreatedByFullName>
<Score>94</Score>
</SearchResult>
</SearchResults>
</output>
So here my first key <SearchResult> have 3 sub-keys. But the second
<SearchResult> key have 5 sub-keys. I don't know what key will be present in
the set since it's a search result.
This would have to give an html which would look like this with 5 columns:
<html>
<body>
<table>
<thead>
<tr>
<th>OTCreateDate</th>
<th>OTCreatedByFullName</th>
<th>Score</th>
<th>Attr_4539360_16</th>
<th>Attr_4539360_26</th>
</tr>
</thead>
<tbody>
<tr>
<td>2009-10-27</td>
<td>Jean-Philippe Martin</td>
<td>97</td>
<td></td>
<td></td>
</tr>
<tr>
<td>2007-08-30</td>
<td>Caroline</td>
<td>94</td>
<td>Nord</td>
<td>Transférer</td>
</tr>
</tbody>
</table>
</body>
</html>
First, can it be done ?
For the head row I managed to get the unique key names with a M. Kay
algorithm I found but how to link a specific TD to its TH ?
<xsl:template match="/">
<table border="1">
<thead>
<tr>
<xsl:for-each select="//SearchResult/*">
<xsl:sort select="name(.)"/>
<xsl:if test="generate-id(.) = generate-id(key('names',
name(.))[1])">
<th>
<xsl:value-of select="local-name()"/>
</th>
</xsl:if>
</xsl:for-each>
</tr>
</thead>
</table>
</xsl:template>
Thank you for any help.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--