xslt 求和节点值 where 节点值
xslt sum node values where node value
我有一个 XSLT 文件,它从 XML 文档中收集信息,然后将其呈现为 CSV 文件。
显示所有信息都很好,但是我现在需要做的是汇总节点 i:totalDurationInSeconds 的所有信息,其中 i:issueBatchNumber = D12345
这是我目前的代码
<xsl:template match="/">
<Textblock>Batch Number,Formula Code,Formula Name,Material Code,Material Name,Final Weight, Target Weight, Date, Material Weight, Job Name, Started At, Finished At</Textblock>
<xsl:value-of select="$newline"/>
<xsl:variable name ="BatchIds" select="//i:issues/i:issue"/>
<!-- begin for each loop -->
<xsl:for-each select="$BatchIds">
<xsl:variable name="currentPosition" select="position()"/>
<xsl:variable name="nextPosition" select="position()+1"/>
<xsl:variable name="lastPosition" select="position()-1" />
<xsl:variable name="lastBatchId" select="//i:issues/i:issue[$lastPosition]/i:issueBatchNumber"/>
<xsl:variable name="thisBatchId" select="i:issueBatchNumber" />
<xsl:choose>
<xsl:when test="not($lastBatchId = $thisBatchId)" >
<xsl:variable name="startingBatchId" select="//i:issues/i:issue[1]/i:issueBatchNumber"/>
Batch ID: <xsl:value-of select="i:issueBatchNumber"/><xsl:value-of select="$newline"/>
Total Time in Seconds: <sum value here -- this is the bit I dont know how to do>
</xsl:when>
<xsl:otherwise >
</xsl:otherwise>
</xsl:choose>
outputting csv data here
</xsl:for-each>
这是我正在处理的 xml 数据的示例
<issues>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:33:38</dateStarted>
<finishedAt>2015-04-30T02:36:03</finishedAt>
<dispenseDurationInSeconds>144.78</dispenseDurationInSeconds>
</issue>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:36:03</dateStarted>
<finishedAt>2015-04-30T02:49.33</finishedAt>
<dispenseDurationInSeconds>13.3</dispenseDurationInSeconds>
</issue>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:49.33</dateStarted>
<finishedAt>2015-04-30T02:54.22</finishedAt>
<dispenseDurationInSeconds>5.99</dispenseDurationInSeconds>
</issue>
</issues>
你可以这样试试:
<xsl:value-of
select="sum(../i:issue[i:issueBatchNumber=$thisBatchId]/i:dispenseDurationInSeconds)">
以上 xpath return 来自具有子 issueBatchNumber
的父 issue
元素的所有 dispenseDurationInSeconds
的总和等于当前 $thisBatchId
值。
我有一个 XSLT 文件,它从 XML 文档中收集信息,然后将其呈现为 CSV 文件。
显示所有信息都很好,但是我现在需要做的是汇总节点 i:totalDurationInSeconds 的所有信息,其中 i:issueBatchNumber = D12345
这是我目前的代码
<xsl:template match="/">
<Textblock>Batch Number,Formula Code,Formula Name,Material Code,Material Name,Final Weight, Target Weight, Date, Material Weight, Job Name, Started At, Finished At</Textblock>
<xsl:value-of select="$newline"/>
<xsl:variable name ="BatchIds" select="//i:issues/i:issue"/>
<!-- begin for each loop -->
<xsl:for-each select="$BatchIds">
<xsl:variable name="currentPosition" select="position()"/>
<xsl:variable name="nextPosition" select="position()+1"/>
<xsl:variable name="lastPosition" select="position()-1" />
<xsl:variable name="lastBatchId" select="//i:issues/i:issue[$lastPosition]/i:issueBatchNumber"/>
<xsl:variable name="thisBatchId" select="i:issueBatchNumber" />
<xsl:choose>
<xsl:when test="not($lastBatchId = $thisBatchId)" >
<xsl:variable name="startingBatchId" select="//i:issues/i:issue[1]/i:issueBatchNumber"/>
Batch ID: <xsl:value-of select="i:issueBatchNumber"/><xsl:value-of select="$newline"/>
Total Time in Seconds: <sum value here -- this is the bit I dont know how to do>
</xsl:when>
<xsl:otherwise >
</xsl:otherwise>
</xsl:choose>
outputting csv data here
</xsl:for-each>
这是我正在处理的 xml 数据的示例
<issues>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:33:38</dateStarted>
<finishedAt>2015-04-30T02:36:03</finishedAt>
<dispenseDurationInSeconds>144.78</dispenseDurationInSeconds>
</issue>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:36:03</dateStarted>
<finishedAt>2015-04-30T02:49.33</finishedAt>
<dispenseDurationInSeconds>13.3</dispenseDurationInSeconds>
</issue>
<issue>
<weight>0.903999984264374</weight>
<materialBatch>
<Code>WB821</materialCode>
<weight>0</weight>
<cost>0</cost>
</materialBatch>
<issueBatchNumber>D15601001</issueBatchNumber>
<jobNumber>Default Job 2015-4</jobNumber>
<date>2015-04-30T02:36:47</date>
<dateStarted>2015-04-30T02:49.33</dateStarted>
<finishedAt>2015-04-30T02:54.22</finishedAt>
<dispenseDurationInSeconds>5.99</dispenseDurationInSeconds>
</issue>
</issues>
你可以这样试试:
<xsl:value-of
select="sum(../i:issue[i:issueBatchNumber=$thisBatchId]/i:dispenseDurationInSeconds)">
以上 xpath return 来自具有子 issueBatchNumber
的父 issue
元素的所有 dispenseDurationInSeconds
的总和等于当前 $thisBatchId
值。