I've created a stylesheet to convert PMD XML reports to HTML, which can can be used in conjunction with the PMD Ant task.
Basically I've simply adapted "checkstyle-noframes.xsl", written by Stephane Bailliez for CheckStyle, to be used with PMD.
You find it attached.
Stefano
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" indent="yes"/> <xsl:decimal-format decimal-separator="." grouping-separator="," />
<!-- PMD XML Style Sheet by Stefano Mancarella <[EMAIL PROTECTED]> --> <!-- Adapted (should say copied!) from "checkstyle-noframes.xsl", created by --> <!-- Stephane Bailliez <[EMAIL PROTECTED]> and part of the Checkstyle --> <!-- distribution found at http://checkstyle.sourceforge.net --> <xsl:template match="pmd"> <html> <head> <title>PMD Audit</title> <style type="text/css"> .bannercell { border: 0px; padding: 0px; } body { margin-left: 10; margin-right: 10; font:normal 80% arial,helvetica,sanserif; background-color:#FFFFFF; color:#000000; } .a td { background: #efefef; } .b td { background: #fff; } th, td { text-align: left; vertical-align: top; } th { font-weight:bold; background: #ccc; color: black; } table, th, td { font-size:100%; border: none } table.log tr td, tr th { } h2 { font-weight:bold; font-size:140%; margin-bottom: 5; } h3 { font-size:100%; font-weight:bold; background: #525D76; color: white; text-decoration: none; padding: 5px; margin-right: 2px; margin-left: 2px; margin-bottom: 0; } </style> </head> <body> <a name="top"></a> <!-- jakarta logo --> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td class="bannercell" rowspan="2"> <!--a href="http://jakarta.apache.org/"> <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> </a--> </td> <td class="text-align:right"><h2>PMD Audit</h2></td> </tr> <tr> <td class="text-align:right">Designed for use with <a href='http://pmd.sourceforge.net/'>PMD</a> and <a href='http://ant.apache.org'>Ant</a>.</td> </tr> </table> <hr size="1"/> <!-- Summary part --> <xsl:apply-templates select="." mode="summary"/> <hr size="1" width="100%" align="left"/> <!-- Package List part --> <xsl:apply-templates select="." mode="filelist"/> <hr size="1" width="100%" align="left"/> <!-- For each package create its part --> <xsl:for-each select="file"> <xsl:sort select="@name"/> <xsl:apply-templates select="."/> <p/> <p/> </xsl:for-each> <hr size="1" width="100%" align="left"/> </body> </html> </xsl:template> <xsl:template match="pmd" mode="filelist"> <h3>Files</h3> <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> <tr> <th>Name</th> <th>Violations</th> </tr> <xsl:for-each select="file"> <xsl:sort select="@name"/> <xsl:variable name="violationCount" select="count(violation)"/> <tr> <xsl:call-template name="alternated-row"/> <td><a href="#f-{@name}"><xsl:value-of select="@name"/></a></td> <td><xsl:value-of select="$violationCount"/></td> </tr> </xsl:for-each> </table> </xsl:template> <xsl:template match="file"> <a name="f-{@name}"></a> <h3>File <xsl:value-of select="@name"/></h3> <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> <tr> <th>Violation Description</th> <th>Rule</th> <th>Line</th> </tr> <xsl:for-each select="violation"> <tr> <xsl:call-template name="alternated-row"/> <td><xsl:value-of select="."/></td> <td><xsl:value-of select="@rule"/></td> <td><xsl:value-of select="@line"/></td> </tr> </xsl:for-each> </table> <a href="#top">Back to top</a> </xsl:template> <xsl:template match="pmd" mode="summary"> <h3>Summary</h3> <xsl:variable name="fileCount" select="count(file)"/> <xsl:variable name="violationCount" select="count(file/violation)"/> <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> <tr> <th>Files</th> <th>Violations</th> </tr> <tr> <xsl:call-template name="alternated-row"/> <td><xsl:value-of select="$fileCount"/></td> <td><xsl:value-of select="$violationCount"/></td> </tr> </table> </xsl:template> <xsl:template name="alternated-row"> <xsl:attribute name="class"> <xsl:if test="position() mod 2 = 1">a</xsl:if> <xsl:if test="position() mod 2 = 0">b</xsl:if> </xsl:attribute> </xsl:template> </xsl:stylesheet>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
