How to convert XML to a HTML table using XSL for-each
- by Meeeee
I am trying to convert some XML with XSL, to make the output look better and more readable for other users. I have some XML along the lines of:
<G>
<OE>
<example1>Sample 1</example1>
<example2>Sample 2</example2>
<var name="name1">
<integer>1</integer>
</var>
</OE>
</G>
I want to get all the details from it and display it in a table so I use the following XSL code:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<h2>Heading</h2>
<table border="1">
<tr bgcolor="#3399FF">
<th>Example 1</th>
<th>Example 2</th>
<th>Var name</th>
<th>Int</th>
</tr>
<xsl:for-each select="G/OE">
<xsl:for-each select="var">
<tr>
<td>
<xsl:value-of select="Example 1" />
</td>
<td>
<xsl:value-of select="Example 2" />
</td>
<td>
<xsl:value-of select="@name" />
</td>
<td>
<xsl:value-of select="integer" />
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
I know that the following XSL won't work properly. I want the output to be:
Sample 1, Sample 2, name1, 1 - in a table format.
My problem is I don't know how to do this. In the above XSL code it will only retrieve var and integer. If I only use the top <xsl:for-each>, then only the first two are retrieved.
I have tried moving the 2nd <xsl:for-each> after the first to have been selected, so between:
<td><xsl:value-of select="Example 2"/></td>
and
<td><xsl:value-of select="@name"/></td>
I get an error. Is there any way to solve this problem?
Thanks for the help.