我一直在努力确定如何获取游戏结果的XML文件(团队和最终得分)并生成一个团队排名列表,其中显示每个团队以及他们赢得,失败或并列的次数。结果也应按总胜利排序,但我甚至无法找出计算胜负的好方法,更不用说按结果排序了。我知道它必须涉及muenchian分组,并且我编写了找到所有不同团队的部分,但是我很难在那里去。任何帮助都会非常感激。
games.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="games.xsl"?>
<Games>
<Game>
<Home>Team A</Home>
<Away>Team B</Away>
<Home_Score>20</Home_Score>
<Away_Score>15</Away_Score>
</Game>
<Game>
<Home>Team C</Home>
<Away>Team D</Away>
<Home_Score>12</Home_Score>
<Away_Score>18</Away_Score>
</Game>
<Game>
<Home>Team A</Home>
<Away>Team C</Away>
<Home_Score>8</Home_Score>
<Away_Score>8</Away_Score>
</Game>
<Game>
<Home>Team B</Home>
<Away>Team D</Away>
<Home_Score>6</Home_Score>
<Away_Score>14</Away_Score>
</Game>
<Game>
<Home>Team D</Home>
<Away>Team C</Away>
<Home_Score>9</Home_Score>
<Away_Score>11</Away_Score>
</Game>
<Game>
<Home>Team C</Home>
<Away>Team A</Away>
<Home_Score>13</Home_Score>
<Away_Score>13</Away_Score>
</Game>
</Games>
games.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Key for identifying teams -->
<xsl:key name="unique-teams" match="/Games/Game" use="Home" />
<xsl:template match="/">
<html>
<head>
<title>Team Standings</title>
</head>
<body>
<!-- Get distinct teams, sort by team name -->
<xsl:apply-templates select="//Game[generate-id() = generate-id(key('unique-teams', Home)[1])]">
<xsl:sort select="Home" />
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="Game">
<!-- Current team -->
<xsl:variable name="selectedteam" select="Home" />
<!-- Output each unique team name to the screen -->
<h1><xsl:value-of select="$selectedteam"/></h1>
<!-- Loop through all games to calculate totals??? -->
<xsl:for-each select="//Game">
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
你想要这样的东西(XSLT 1.0):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kTeamByName" match="Home|Away" use="."/>
<xsl:template match="/*">
<table border="1">
<tr>
<td>Team</td><td>W</td><td>D</td><td>L</td>
</tr>
<xsl:apply-templates select=
"(*/Home | */Away)
[generate-id()
=
generate-id(key('kTeamByName', .)[1])
]
">
<xsl:sort data-type="number" order="descending" select=
"count(key('kTeamByName', .)
[self::Home
and
../Home_Score > ../Away_Score
or
self::Away
and
../Away_Score > ../Home_Score
]
)
"/>
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="Home|Away">
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select=
"count(key('kTeamByName', .)
[self::Home
and
../Home_Score > ../Away_Score
or
self::Away
and
../Away_Score > ../Home_Score
]
)"/>
</td>
<td>
<xsl:value-of select=
"count(key('kTeamByName', .)
[../Home_Score = ../Away_Score]
)"/>
</td>
<td>
<xsl:value-of select=
"count(key('kTeamByName', .)
[self::Home
and
../Away_Score > ../Home_Score
or
self::Away
and
../Home_Score > ../Away_Score
]
)"/>
</td>
</tr>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<Games>
<Game>
<Home>Team A</Home>
<Away>Team B</Away>
<Home_Score>20</Home_Score>
<Away_Score>15</Away_Score>
</Game>
<Game>
<Home>Team C</Home>
<Away>Team D</Away>
<Home_Score>12</Home_Score>
<Away_Score>18</Away_Score>
</Game>
<Game>
<Home>Team A</Home>
<Away>Team C</Away>
<Home_Score>8</Home_Score>
<Away_Score>8</Away_Score>
</Game>
<Game>
<Home>Team B</Home>
<Away>Team D</Away>
<Home_Score>6</Home_Score>
<Away_Score>14</Away_Score>
</Game>
<Game>
<Home>Team D</Home>
<Away>Team C</Away>
<Home_Score>9</Home_Score>
<Away_Score>11</Away_Score>
</Game>
<Game>
<Home>Team C</Home>
<Away>Team A</Away>
<Home_Score>13</Home_Score>
<Away_Score>13</Away_Score>
</Game>
</Games>
产生了想要的正确结果:
<table border="1">
<tr>
<td>Team</td>
<td>W</td>
<td>D</td>
<td>L</td>
</tr>
<tr>
<td>Team D</td>
<td>2</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>Team A</td>
<td>1</td>
<td>2</td>
<td>0</td>
</tr>
<tr>
<td>Team C</td>
<td>1</td>
<td>2</td>
<td>1</td>
</tr>
<tr>
<td>Team B</td>
<td>0</td>
<td>0</td>
<td>2</td>
</tr>
</table>