I have an xml similar to the one as follows
<DataSet1>
<Table1>
<Column1>Value111</Column1>
<Column2>Value112</Column2>
</Table1>
<Table1>
<Column1>Value121</Column1>
<Column2>Value122</Column2>
</Table1>
<Table1>
<Column1>Value131</Column1>
<Column2>Value132</Column2>
</Table1>
<Table2>
<Column1>Value211</Column1>
<Column2>Value212</Column2>
</Table2>
<Table2>
<Column1>Value221</Column1>
<Column2>Value222</Column2>
</Table2>
<Table2>
<Column1>Value231</Column1>
<Column2>Value232</Column2>
</Table2>
</DataSet1>
Where Table1 and Table2 are added dynamically in the dataset. So there can be n number of tables in dataset as Tablen.
I want to write xsl which produces the html as follows
Table1
<table>
<tr>
<td>Value111</td>
<td>Value112</td>
</tr>
<tr>
<td>Value121</td>
<td>Value122</td>
</tr>
<tr>
<td>Value131</td>
<td>Value132</td>
</tr>
</table>
Table2
<table>
<tr>
<td>Value211</td>
<td>Value212</td>
</tr>
<tr>
<td>Value221</td>
<td>Value222</td>
</tr>
<tr>
<td>Value231</td>
<td>Value232</td>
</tr>
</table>
Is there any way to select xsl template as select="DataSet1/Table*" which can match with any table and iterate the structure?
Please help!!!.
This transformation:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kTableByName" match="*[starts-with(name(),'Table')]"
use="name()"/>
<xsl:template match=
"*[generate-id()
=
generate-id(key('kTableByName', name())[1])
]">
<xsl:value-of select="concat('
', name(), '
')"/>
<table>
<xsl:apply-templates select="key('kTableByName', name())" mode="inGroup"/>
</table>
</xsl:template>
<xsl:template match="*[starts-with(name(),'Table')]" mode="inGroup">
<tr>
<xsl:apply-templates select="*" mode="inGroup"/>
</tr>
</xsl:template>
<xsl:template match="*[starts-with(name(),'Table')]/*" mode="inGroup">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
when applied on the provided XML document:
<DataSet1>
<Table1>
<Column1>Value111</Column1>
<Column2>Value112</Column2>
</Table1>
<Table1>
<Column1>Value121</Column1>
<Column2>Value122</Column2>
</Table1>
<Table1>
<Column1>Value131</Column1>
<Column2>Value132</Column2>
</Table1>
<Table2>
<Column1>Value211</Column1>
<Column2>Value212</Column2>
</Table2>
<Table2>
<Column1>Value221</Column1>
<Column2>Value222</Column2>
</Table2>
<Table2>
<Column1>Value231</Column1>
<Column2>Value232</Column2>
</Table2>
</DataSet1>
produces the wanted, correct result:
Table1
<table>
<tr>
<td>Value111</td>
<td>Value112</td>
</tr>
<tr>
<td>Value121</td>
<td>Value122</td>
</tr>
<tr>
<td>Value131</td>
<td>Value132</td>
</tr>
</table>
Table2
<table>
<tr>
<td>Value211</td>
<td>Value212</td>
</tr>
<tr>
<td>Value221</td>
<td>Value222</td>
</tr>
<tr>
<td>Value231</td>
<td>Value232</td>
</tr>
</table>
Explanation:
Proper use of the Muenchian Grouping method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With