Мне нужно сгенерировать элемент, который накапливает сумму для данного ввода XML.
Ввод XML:
<item id = "15117180817160" amount = "1441.63"/>
<item id = "15117180817161" amount = "300.10"/>
Это мой XSLT:
<table cellspacing = "0" rules = "all" border = "1" style = "border-collapse:collapse;">
<tr>
<th scope = "col">Nro. de Reclamo</th>
<th scope = "col">Monto $</th>
</tr>
<xsl:for-each select = "item">
<tr>
<td align = "left">
<xsl:value-of select = "@item" />
</td>
<td align = "center" style = "width:8%;">
<xsl:value-of select = "@amount" />
</td>
</tr>
</xsl:for-each>
<tr>
<td></td>
<td></td>
<td align = "right">
Total:
</td>
<td>
<xsl:value-of select = "sum(/item/@amount)"/>
</td>
</tr>
</table>
И это мой результат:
<html xmlns:foo = "http://www.foo.org/" xmlns:bar = "http://www.bar.org">
<body>
<h2></h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>id</th>
<th>amount</th>
</tr>
<tr>
<td>15117180817160</td>
<td>1441.63</td>
<br/>
</tr>
<tr>
<td>15117180817161</td>
<td>300.10</td>
<br/>
</tr>
Total: 0
</table>
Результат должен быть Total = 1741,73
Как я могу реализовать функцию суммы, которая возвращает правильное итоговое значение?
С уважением Хорхе
Вместо этого ...
<xsl:value-of select = "sum(/item/@amount)"/>
Сделай это...
<xsl:value-of select = "sum(item/@amount)"/>
Начальный /
в первом выражении представляет узел документа, поэтому он будет работать, только если дочерний корневой элемент называется item
. Вы не показали это в своем примере XML, но поскольку у вас есть несколько элементов item
, они должны содержаться в родительском элементе.
Вы уже задавали этот вопрос. Вы также получили ответ, в котором упоминалось, что вам следует переместить
<xsl:value-of select = "sum(/item/@amount)"/>
за пределы цикла. Если у вас есть новый вопрос, пожалуйста, редактировать и добавьте полныйминимальный воспроизводимый пример и укажите, чем ваша новая проблема отличается от старой. Спасибо.