2015-07-31 2 views
0

Как форматировать узел, а затем суммировать эти узлы?Xslt 1.0 формат узла, а затем сумма

Я использую функцию суммы, а затем форматирование.

<xsl:value-of select="format-number(sum(/Item/Total),'&#163;#.00')"/> 

Но когда я пытаюсь сделать как

<xsl:value-of select="sum(format-number(/Item/Total,'&#163;#.00'))"/> 

он бросает мне ошибку говоря сумма не может быть применен, как это.

Это используется для создания отчета с помощью C#

+2

Функция сумма ожидает, в качестве входных данных в набор узлов, Whe reas функция format-number возвращает строку. Какая именно ошибка вы получаете? Кроме того, что вы пытаетесь достичь именно в случае второй попытки? Вы уверены, что имеете в виду xslt 2? Обе эти функции доступны в реализации Microsoft, которая является (afaik) только версией 1 (к сожалению). – Marcus

+0

@Marcus в основном я хочу преобразовать эти узлы в отформатированное число (форматирование 2 десятичных знаков, а затем вычислить сумму. Ошибка об узле, указанном вами, как вы упомянули –

+0

@RohithNair "* я хочу преобразовать эти узлы в отформатированное число (2 форматирования в десятичной запятой, а затем вычислить сумму. * «Это не имеет смысла. Возможно, вы хотите ** округлить ** числа перед их суммированием? –

ответ

1

я просто нужно округлять на этих узлах, прежде чем суммированием его

В XSLT 1.0, вы должны сделать это в два этапа. Дано:

XML-

<root> 
    <item id="1"> 
     <amount>1.996</amount> 
    </item> 
    <item id="2"> 
     <amount>2.495</amount> 
    </item> 
    <item id="3"> 
     <amount>10</amount> 
    </item> 
</root> 

XSLT-1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common" 
extension-element-prefixes="exsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/root"> 
    <!-- first pass --> 
    <xsl:variable name="rounded-amounts"> 
     <xsl:for-each select="item"> 
      <amt> 
       <xsl:value-of select="round(amount * 100) div 100" /> 
      </amt> 
     </xsl:for-each> 
    </xsl:variable> 
    <!-- final pass --> 
    <output> 
     <xsl:value-of select="sum(exsl:node-set($rounded-amounts)/amt)" /> 
    </output> 
</xsl:template> 

</xsl:stylesheet> 

Результат

<?xml version="1.0" encoding="UTF-8"?> 
<output>14.5</output> 
Смежные вопросы