如何使用1个元素的值和另一个的属性在XSLT中求和

时间:2012-07-23 06:03:09

标签: xml xslt

我需要遍历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.我正在寻求帮助纠正该行的语法。

0 个答案:

没有答案