New to xslt so go easy ,I am been trying to convert an xml to html via xslt and I cannot seem to get it right.
Headers and rows should not be hardcoded and should be as generic as possible.
Wanted result:
Xml Used that I have no control over
<?xml version="1.0" encoding="utf-8"?>
<Generated>
<Employees>
<Employee name="Joe Bloggs">
<Sales>
<Sale key="Sale-Id" value="333" />
<Sale key="Sale-Field1" value="a" />
<Sale key="Sale-Field2" value="b" />
</Sales>
</Employee>
<Employee name="Mark Bloggs">
<Sales>
<Sale key="Sale-Id" value="334" />
<Sale key="Sale-Field1" value="c" />
<Sale key="Sale-Field2" value="d" />
</Sales>
</Employee>
</Employees>
</Generated>
XSLT My Attempt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
<!-- main body -->
<xsl:template match="/">
<html>
<body>
<h3>Employees</h3>
<table border="1">
<tr bgcolor="blue">
<!--Header only so select first row to get headers-->
<xsl:for-each select="(Generated/Employees/Employee)[1]/Sales/Sale">
<th>
<xsl:value-of select="@key"/>
</th>
</xsl:for-each>
</tr>
<!--Get all the other rows-->
<xsl:for-each select="(Generated/Employees/Employee)/Sales/Sale">
<tr>
<td>
<xsl:value-of select="@value"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
My Wrong outcome
Any suggestion how to fix this and get my wanted result as per image above
Many thanks