У меня есть вопрос о форматировании вывода функции sum()
в XQuery / XSLT / XPath.У меня есть как таблица стилей XSLT, так и XQuery.Я могу получить правильное форматирование в XSLT, но не в XQuery.
Вот пример входного файла:
<userTotals>
<user cost="138764.63" hours="1506.51"/>
<user cost="329555.76" hours="3577.85"/>
<user cost="213909.81" hours="2322.33"/>
<user cost="22684.85" hours="246.28"/>
<user cost="6147.42" hours="66.74"/>
<user cost="1269.27" hours="13.78"/>
<user cost="181.45" hours="1.97"/>
<user cost="755.30" hours="8.2"/>
</userTotals>
Вот пример таблицы стилей:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/userTotals">
<results>
<cost><xsl:value-of select="sum(user/@cost)"/></cost>
<hours><xsl:value-of select="sum(user/@hours)"/></hours>
<hours-formatted>
<xsl:value-of select="format-number(sum(user/@hours),'###.##')"/>
</hours-formatted>
</results>
</xsl:template>
</xsl:stylesheet>
Вот вывод:
<results>
<cost>713268.49</cost>
<hours>7743.659999999999</hours>
<hours-formatted>7743.66</hours-formatted>
</results>
Обратите внимание на вывод <hours>
и <hours-formatted>
.Содержимое <hours>
является неизмененным / неформатированным выводом sum()
.Содержимое <hours-formatted>
- это способ, которым я хочу, чтобы число форматировалось как в XSLT, так и в XQuery.
Проблема в том, что в XQuery format-number()
недоступен.Как я могу одинаково отформатировать результаты sum()
в XSLT и XQuery, чтобы результаты выглядели как <hours-formatted>
?
Потребуется ли мне создать функцию, которая будет выводить sum()
как строка и обработать десятичную самостоятельно?В этом случае мне нужно округлить .659
до .66
.Я надеюсь, что есть лучший способ сделать это (возможно, приведите результаты к другому типу, а затем ??).
Спасибо за любую информацию / руководство, которое вы можете предоставить.