リソースを ID 番号とともにリストする XML ファイルの一部を繰り返し処理する必要があります。これを行う際、ResourceId を変数 $ResId に保存します。次に、ResourceId ごとに、ファイルのさまざまな部分を繰り返し処理し、WorkUnitsYear 要素の StartYear 属性と StartMonth 属性を使用して、各会計年度の各リソースが特定の戦略に割り当てられた時間数を合計する必要があります。WorkUnitsYear 要素への参照を省略すると時間を合計できますが、追加の年と月の属性を使用して合計するための正しい構文を見つけることができませんでした。まず、月と年を含める方法を理解するのを手伝ってください。
次に、次のような複雑なロジックを含める必要があります。XSLT でこのロジックを実装する方法がわかりません。
ここに私がこれまでに持っているコードの一部があります。合計する行を繰り返していることに注意してください。1 回はリソース ID のみで、もう 1 回は年を含める試みの 1 つです。
<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 を返します。その行の構文。