Need improvement for the same question here Create a dynamic XSL based on XML
I am having my XML as follows
<?xml version="1.0" encoding="utf-8"?><DeploymentReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02">
<Alerts>
<Alert Name="DataMotion">
<Issue Value="[dbo].[table]" />
<Issue Value="[dbo].[table1]" />
</Alert>
<Alert Name="DataIssue">
<Issue Value="The column [table].[Columname] on table [dbo].[table] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue you must either: add a default value to the column, mark it as allowing NULL values, or enable the generation of smart-defaults as a deployment option." Id="1" />
<Issue Value="The column [table1].[Columname] on table [dbo].[table1] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue you must either: add a default value to the column, mark it as allowing NULL values, or enable the generation of smart-defaults as a deployment option." Id="2" />
</Alert>
</Alerts>
<Operations>
<Operation Name="Drop">
<Item Value="[dbo].[tbl].[IX_id]" Type="SqlIndex" />
</Operation>
<Operation Name="TableRebuild">
<Item Value="[dbo].[tbl]" Type="SqlTable">
<Issue Id="1" />
</Item>
<Item Value="[dbo].[tbl1]" Type="SqlTable">
<Issue Id="2" />
</Item>
</Operation>
<Operation Name="Create">
</Operation>
</Operations>
</DeploymentReport>
XSL that was modified by previous answer
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:report="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02" exclude-result-prefixes="report">
<xsl:key name="type" match="report:Item" use="@Type"/>
<xsl:key name="value" match="report:Issue" use="@Value"/>
<xsl:template match="/">
<html>
<body>
<table style="border:1px solid;" align="center">
<xsl:for-each select="//report:Issue/report:Item[generate-id() = generate-id(key('value', @Value)[1])]">
<tr style="text-align:center;">
<td style="color:red">
<xsl:value-of select="@Value"/>
</td>
</tr>
<xsl:for-each select="key('value', @Value)">
<tr>
<td>
<xsl:value-of select="@Value"/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
<table style="border:1px solid;" align="center">
<xsl:for-each select="//report:Operation/report:Item[generate-id() = generate-id(key('type', @Type)[1])]">
<tr style="text-align:center;">
<td style="color:red">
<xsl:value-of select="@Type"/>
</td>
</tr>
<xsl:for-each select="key('type', @Type)">
<tr>
<td>
<xsl:value-of select="@Value"/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Expected html should be as follows
<table style="border:1px solid;" align="center">
<tr>
<td style="color:red">
DataIssue
</td>
<tr>
<td>
1) The column [table].[Columname] on table [dbo].[table] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue you must either: add a default value to the column, mark it as allowing NULL values, or enable the generation of smart-defaults as a deployment option
</td>
</tr>
<tr>
<td>
2) The column [table].[Columname] on table [dbo].[table] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue you must either: add a default value to the column, mark it as allowing NULL values, or enable the generation of smart-defaults as a deployment option
</td>
</tr>
<td>
N number) The column [table].[Columname] on table [dbo].[table] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue you must either: add a default value to the column, mark it as allowing NULL values, or enable the generation of smart-defaults as a deployment option
</td>
</tr>
<tr>
<td style="color:red">
Drop - SqlIndex (combination of Operation name and Item type)
</td>
<tr>
<td>
[dbo].[tbl].[IX_id]
</td>
</tr>
<tr>
<td style="color:red">
TableRebuild - SqlTable
</td>
<tr>
<td>
1 ) [dbo].[tbl1]
</td>
</tr>
<tr>
<td>
2 ) [dbo].[tbl2]
</td>
</tr>
<td style="color:red">
Create - SqlIndex
</td>
<tr>
<td>
1 ) [dbo].[index1]
</td>
</tr>
<tr>
<td>
2 ) [dbo].[index2]
</td>
</tr>
See Question&Answers more detail:os