我无法显示数据。只显示XML文档中的第一个元素。我需要一个按贡献者列出的贡献者列表。这是我的代码:
<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="persons" select="document('persons.xml')" />
<xsl:key name="contAmount" match="donation" use="@amount" />
<xsl:key name="pinID" match="donation" use="@pin" />
<xsl:key name="personID" match="person" use="@pid" />
<xsl:template match="/">
<html>
<head>
<title>Lighthouse Charitable Trust</title>
<link href="money.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>Contribution Report</h2>
<p>Total Donation Amount:
<xsl:value-of select="format-number(sum(//donations/donation/@amount), '$###,000')" />
</p>
<p>Total Donors:
<xsl:value-of select="count($persons/persons/person)" />
</p>
<p>
<xsl:variable name="cid" select="//donations/donation/@pin" />
<xsl:for-each select="$persons">
<xsl:value-of select="key('personID', $cid)/firstName" />  
<xsl:value-of select="key('personID', $cid)/lastName" /> <br />
<xsl:value-of select="key('personID', $cid)/street" /> <br />
<xsl:value-of select="key('personID', $cid)/city" />,
<xsl:value-of select="key('personID', $cid)/state" />  
<xsl:value-of select="key('personID', $cid)/zip" /> <br />
<xsl:value-of select="key('personID', $cid)/phone" /> <br />
</xsl:for-each>
</p>
<a href="#{generate-id()}">
<xsl:value-of select="person" />
</a>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
谢谢!
答案 0 :(得分:0)
您的persons
变量包含一个文档,该文档是包含子项的单个节点,而不是节点列表。
稍后在样式表中使用<xsl:for-each>
时,您只会遍历包含此一个文档节点的“列表”。在没有看到源文档的情况下很难准确判断,但看起来您可能需要指定$persons/persons/person
而不是$persons
。这也可能会使您使用key('personID', $cid)
多余,但如果没有更多信息,很难确定。