Ciao a tutti,
sto cercando di realizzare un semplice xsl per convertire un file xml in un formato diverso.
Il mio obbiettivo e' quello di ottenee un file con questo formato:
Dove mostrare il tipo e il numero di "violation" uniche.Codice PHP:<macXimProtocol version="1.0">
<command type="response" name="executeMetrics" id="6">
<project id="?">
<metrics granularity="applicationLevel">
<metric name="a">
<stat id="tot">3</stat>
</metric>
<metric name="b">
<stat id="tot">2</stat>
</metric>
<metric name="c">
<stat id="tot">1</stat>
</metric> ...
Il file xml di partenza ha questo formato:
e questo e' l'XSL che utilizzo:Codice PHP:<?xml version="1.0" encoding="UTF-8"?>
<pmd version="4.2.5">
<file name="a.java">
<violation rule="a" > xxx </violation>
<violation rule="b" > xxy </violation>
</file>
<file name="b.java">
<violation rule="a" > xyz </violation>
<violation rule="b" > abc </violation> </file>
<file name="b.java">
<violation rule="c" > xyz </violation>
<violation rule="a" > abc </violation>
</file>
Codice PHP:<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" indent="no"/>
<xsl:template match="pmd">
<macXimProtocol version="1.0">
<command type="response" name="executeMetrics" id="6">
<project id="?">
<metrics granularity="applicationLevel">
<xsl:for-each select="distinct-values(//violation/@rule)">
<xsl:variable name="ruleCount" select="." />
<metric>
<xsl:attribute name="name">
<xsl:value-of select="."/>
</xsl:attribute>
<stat id="tot">
<xsl:value-of select="count(/pmd/file/violation[@rule=$ruleCount])"/>
</stat>
</metric>
</xsl:for-each>
</metrics>
</project>
</command>
</macXimProtocol>
</xsl:template>
</xsl:stylesheet>
L'errore e' nella riga "count(/pmd/file/violation[@rule=$ruleCount])".
Se sostituisco il parametro della funzione count con "." restituisce sempre uno.
Io vorrei poter risalire l'albero xml e contare invece tutte le occorrenze. QUalche idea su come farlo?
Grazie a tutti
Davide Taibi

Rispondi quotando