我需要遍历XML文件的一部分,该文件列出了具有Id编号的资源。当我这样做时,我将ResourceId存储在变量$ ResId中。然后,对于每个ResourceId,我需要遍历文件的不同部分,并使用WorkUnitsYear元素的StartYear和StartMonth属性总结在每个财政年度中为每个资源分配特定策略的小时数。 我可以将省略对WorkUnitsYear元素的引用的时间相加,但是我无法找到与其他年和月属性求和的正确语法。首先,我想帮助弄清楚如何包含月份和年份。
其次,我需要在以下方面包含一些复杂的逻辑: if(StartYear ='2012'和StartMonth> 6)或(StartYear ='2013'和StartMonth< 7)总和至FY13 等几个财政年度。 我不确定如何在XSLT中实现这个逻辑。
这是我到目前为止的部分代码。请注意,我已经重复了仅使用资源ID进行总计的行和使用我尝试包含年份的一行。
<StrategyPool>
<Strategy Id="109">
<StrategyName>TNC CEs SECO</StrategyName>
<StrategyCalculatedCosts>
<CalculatedWho>
<ResourceId>39</ResourceId>
<ResourceId>43</ResourceId>
</CalculatedWho>
<CalculatedCosts>
<CalculatedWorkUnitsEntries>
<WorkUnitsEntry>
<WorkUnitsEntryResourceId>
<ResourceId>39</ResourceId>
</WorkUnitsEntryResourceId>
<WorkUnitsEntryDetails>
<DateUnitWorkUnits>
<WorkUnitsDateUnit>
<WorkUnitsYear StartYear="2012" StartMonth="7">
</WorkUnitsYear>
</WorkUnitsDateUnit>
<NumberOfUnits>4</NumberOfUnits>
</DateUnitWorkUnits>
</WorkUnitsEntryDetails>
</WorkUnitsEntry>
<WorkUnitsEntry>
<WorkUnitsEntryResourceId>
<ResourceId>43</ResourceId>
</WorkUnitsEntryResourceId>
<WorkUnitsEntryDetails>
<DateUnitWorkUnits>
<WorkUnitsDateUnit>
<WorkUnitsYear StartYear="2012" StartMonth="7">
</WorkUnitsYear>
</WorkUnitsDateUnit>
<NumberOfUnits>1</NumberOfUnits>
</DateUnitWorkUnits>
</WorkUnitsEntryDetails>
</WorkUnitsEntry>
</CalculatedWorkUnitsEntries>
</CalculatedCosts>
</StrategyCalculatedCosts>
</Strategy>
</StrategyPool>
预期输出是一个表行,其中包含每个ResourceId的NumberOfUnits之和。 我的样式表包含以下内容:
<xsl:for-each select="//StrategyPool/Strategy">
<xsl:variable name="StrategyId" select="@Id" />
<xsl:if test="StrategyCalculatedCosts/CalculatedCosts/CalculatedWho/ResourceId[text()=$ResId]">
<tr>
<td>
<xsl:value-of select="StrategyName"/>
</td>
<td>
ID = <xsl:value-of select="$StrategyId"/> <br />
<xsl:value-of select="StrategyDetails"/>
<br />
<xsl:variable name="CalcNode" select="StrategyCalculatedCosts/CalculatedCosts/CalculatedWorkUnitsEntries" />
<xsl:value-of select="sum($CalcNode/WorkUnitsEntry[WorkUnitsEntryResourceId/ResourceId=$ResId]/WorkUnitsEntryDetails/DateUnitWorkUnits/NumberOfUnits)" />
<br />
<xsl:value-of select="sum($CalcNode/WorkUnitsEntry[WorkUnitsEntryResourceId/ResourceId=$ResId]/WorkUnitsEntryDetails/DateUnitWorkUnits[WorkUnitsYear[@StartYear='2012']]/NumberOfUnits)" />
</td>
</tr>
</xsl:if>
</xsl:for-each>
第一行包含[value-of select =“sum($ CalcNode)给出预期的总数。下一行类似,试图包括StartYear给出意想不到的总数0.我正在寻求帮助纠正该行的语法。