我在使用结果树片段显示水平条形图时遇到问题

时间:2012-02-04 21:43:09

标签: xml xslt fragment

我是XSL的新手,所以我不确定我在这里做错了什么。该页面应该显示选举结果,其中水平条形图对应于每个候选人收到的投票百分比。我在使用结果树片段显示水平条形图时遇到了问题。

我已经尝试过我的研究,但我被困住了。有人可以帮忙吗?这是我的代码:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Tr…
<xsl:output method="html" version="4.0" />

<xsl:variable name="redcell">
<td class="red"> </td>
</xsl:variable>

<xsl:variable name="bluecell">
<td class="blue"> </td>
</xsl:variable>

<xsl:variable name="greencell">
<td class="green"> </td>
</xsl:variable>

<xsl:template match="/">
<html>
<head>
<title>Election Night Results</title>
<link href="polls.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="intro">
<p><img src="logo.jpg" alt="Election Day Results" /></p>
<a href="#">Election Home Page</a>
<a href="#">President</a>
<a href="#">Senate Races</a>
<a href="#">Congressional Races</a>
<a href="#">State Senate</a>
<a href="#">State House</a>
<a href="#">Local Races</a>
<a href="#">Judicial</a>
<a href="#">Referendums</a>
</div>

<div id="results">
<h1>Congressional Races</h1>
<xsl:apply-templates select="polls/race" />
</div>
</body>
</html>
</xsl:template>



<xsl:template match="candidate">
<xsl:variable name="percent" select="votes div sum(..//votes)" />
<tr>
<td class="name"><xsl:value-of select="name" /> (<xsl:value-of select="party" />)</td>
<td class="num"><xsl:value-of select="format-number(votes, '#,##0')" /> (<xsl:value-of select="format-number($percent, '#0%')" />)</td>
<xsl:apply-templates select="showBar">
<xsl:with-param name="cells" select="$percent * 100" />
<xsl:with-param name="partyType" select="party" />
</xsl:apply-templates>
</tr>
</xsl:template>

<xsl:template match="race">
<h2><xsl:value-of select="title" /></h2>
<table cellpadding="1" cellspacing="1">
<tr><th>Candidate</th><th class="num">Votes</th></tr>
<xsl:apply-templates select="candidate" />
</table>
</xsl:template>

<xsl:template name="showBar">
<xsl:param name="cells" select="0" />
<xsl:param name="partyType" />

<xsl:if test="$cells > 0">

<xsl:choose>
<xsl:when test="$partyType='R'">
<xsl:copy-of select="$redcell" />
</xsl:when>

<xsl:when test="$partyType='D'">
<xsl:copy-of select="$bluecell" />
</xsl:when>

<xsl:otherwise>
<xsl:copy-of select="$greencell" />
</xsl:otherwise>

</xsl:choose>

<xsl:call-template name="showBar">
<xsl:with-param name="cells" select="$cells - 1" />
<xsl:with-param name="partyType" select="party" />
</xsl:call-template>

</xsl:if>
</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

<xsl:apply-templates select="showBar">

您不希望将模板应用于showBar元素。您想要调用命名模板“showBar”。使用此:

<xsl:call-template name="showBar">

并更改结束标记。

顺便说一下,你的空间会在那些td元素中崩溃。您可以使用xsl:text来阻止这种情况,例如

<xsl:text>