2015-06-05 6 views
0

У меня есть файл XSLT, который собирает информацию из документа XML, а затем представляет его в файл CSV.xslt сумма значений узла, где значение узла

Представление всей информации работает нормально, однако, что мне нужно сделать сейчас, чтобы суммировать всю информацию узла I: totalDurationInSeconds где я: 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> 
+0

Просьба предоставить входной XML, обновить XSLT для завершения, выход (CSV), а затем попытаться объяснить проблему. –

+0

Я добавил образец XML-ввода, вывод CSV выходит из строя, его суммирование по dispenseDurationInSeconds, с которым мне нужна помощь, как описано выше –

+0

, где находится узел, на который вы хотите рассчитывать, не может видеть его в ваш образец, так трудно ответить. Это что-то вроде этого вы ищете: sum (* [i: issueBatchNumber = D12345]/i: totalDurationInSeconds). Но без каких-либо подробностей это более или менее полная догадка ... –

ответ

1

Вы можете попробовать этот способ:

<xsl:value-of 
    select="sum(../i:issue[i:issueBatchNumber=$thisBatchId]/i:dispenseDurationInSeconds)"> 

выше XPath возвращенной сумму всех dispenseDurationInSeconds от родителей issue элементов, имеющих ребенок issueBatchNumber равен текущей $thisBatchId значения.

Смежные вопросы