访问多个文档中的数据

时间:2012-02-13 02:49:28

标签: xml xslt

我无法显示数据。只显示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" /> &#160;
     <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" /> &#160;
     <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>

谢谢!

1 个答案:

答案 0 :(得分:0)

您的persons变量包含一个文档,该文档是包含子项的单个节点,而不是节点列表。

稍后在样式表中使用<xsl:for-each>时,您只会遍历包含此一个文档节点的“列表”。在没有看到源文档的情况下很难准确判断,但看起来您可能需要指定$persons/persons/person而不是$persons。这也可能会使您使用key('personID', $cid)多余,但如果没有更多信息,很难确定。