【发布时间】:2017-06-25 12:35:04
【问题描述】:
我是 XSLT 1.0 的新手,请原谅我糟糕的编码技能。我正在尝试计算在 xsl:key 中包含“fee”之类的字符串的记录。虽然这适用于xsl:value-of select="count(//Comments[contains(., 'Fee')])",但它会将计数应用于所有不同的记录。如何计算包含特定于 ReferralDesc 元素的字符串的记录。
输出(当前)
Referral Count Days Days CntInfo
Architect 9 794 88.2 1
Building 26 1784 68.6 1
Trees 6 548 91.3 1
XML
<Referrals>
<Referral>
<ApplicationId>51240</ApplicationId>
<Proposal>Demolition work</Proposal>
<ReferralDesc>Architect</ReferralDesc>
<Lapsed>49</Lapsed>
<Officer>Mark What</Officer>
<Comments>Information provided</Comments>
</Referral>
<Referral>
<ApplicationId>51304</ApplicationId>
<Proposal>Alterations and Additions</Proposal>
<ReferralDesc>Tree</ReferralDesc>
<Lapsed>28</Lapsed>
<Officer>Mark Some</Officer>
<Comments>Fee quoted</Comments>
</Referral>
</Referrals>
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="groups" match="Referral" use="ReferralDesc" />
<xsl:key name="info" match="Referral" use="normalize-space(Comments)" />
<xsl:key name="days" match="Referral" use="Lapsed" />
<xsl:template match="NewDataSet">
<table style="width:55%; font-size:10px;">
<thead>
<th style="width:25%" class="borders">Referral</th>
<th style="width:10%" class="borders">Count</th>
<th style="width:10%" class="borders">Days total</th>
<th style="width:10%" class="borders">Days avg</th>
<th style="width:10%" class="borders">CntInfo</th>
</thead>
<xsl:for-each select="Referrals/Referral[count(. | key('groups', ReferralDesc)[1]) = 1]">
<xsl:sort select="ReferralDesc" />
<tr>
<td class="borders">
<xsl:value-of select="ReferralDesc" />
</td>
<td class="borders">
<xsl:value-of select="count(. | key('groups', ReferralDesc))"/>
</td>
<td class="borders">
<!-- <xsl:value-of select="sum(Lapsed)"/> -->
<xsl:value-of select="sum(key('groups',ReferralDesc)/Lapsed)"/>
</td>
<td class="borders">
<xsl:variable name="nRef">
<xsl:value-of select="count(. | key('groups', ReferralDesc))"/>
</xsl:variable>
<xsl:variable name="sDay">
<xsl:value-of select="sum(key('groups',ReferralDesc)/Lapsed)"/>
</xsl:variable>
<xsl:value-of select="format-number($sDay div $nRef, '###,###.0')"/>
</td>
<td class="borders">
<xsl:value-of select="count(//Comments[contains(., 'fee')])" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stlyesheet>
回答
看来坚持是有回报的。更新键()。 used xsl:key name="info" match="Referral[contains(./Comments, 'fee')]" use="ReferralDesc"
【问题讨论】: