File: Data.xml
<?xml version="1.0"?>
<results group="A">
<match>
<date>10-Jun-98</date>
<team score="2">team 1</team>
<team score="1">team 2</team>
</match>
<match>
<date>10-Jun-98</date>
<team score="2">team 3</team>
<team score="2">team 4</team>
</match>
<match>
<date>16-Jun-98</date>
<team score="1">team 2</team>
<team score="1">team 4</team>
</match>
</results>
File: Transform.xslt
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:variable name="teams" select="distinct-values(//team)" />
<xsl:variable name="matches" select="//match" />
<xsl:template match="results">
<league>
<xsl:for-each select="$teams">
<xsl:variable name="this" select="." />
<xsl:variable name="played"
select="count($matches[team=$this])" />
<xsl:variable name="won"
select="count($matches[team[.=$this]/@score > team[.!=$this]/@score])" />
<xsl:variable name="lost"
select="count($matches[team[.=$this]/@score < team[.!=$this]/@score])" />
<xsl:variable name="drawn"
select="count($matches[team[.=$this]/@score = team[.!=$this]/@score])" />
<xsl:variable name="for"
select="sum($matches/team[.=current()]/@score)" />
<xsl:variable name="against"
select="sum($matches[team=current()]/team/@score) - $for" />
<team name="{.}" played="{$played}" won="{$won}"
drawn="{$drawn}" lost="{$lost}" for="{$for}" against="{$against}" />
</xsl:for-each>
</league>
</xsl:template>
</xsl:transform>
Output:
<?xml version="1.0" encoding="UTF-8"?><league>
<team name="team 1" played="1" won="1" drawn="0"
lost="0" for="2" against="1"/><team name="team 2"
played="2" won="0" drawn="1" lost="1" for="2" against="3"/>
<team name="team 3" played="1" won="0" drawn="1" lost="0"
for="2" against="2"/><team name="team 4" played="2" won="0"
drawn="2" lost="0" for="3" against="3"/></league>
|