У меня есть такой XML-фрагмент
<lines>
<item><code>1.1</code><amt>1000.00</amt></item>
<item><code>1.3.1</code><amt>2000.00</amt></item>
<item><code>1.3.2</code><amt>3000.00</amt></item>
<item><code>2.1</code><amt>4000.00</amt></item>
...
</lines>
Я хочу получить сумму всех узлов 1 *. Полный список известен, поэтому я могу написать что-то вроде:
<xsl:value-of select="item[code=1.1]/amt +
item[code=1.2]/amt + item[code=1.3.1]/amt + item[code=1.3.2]/amt"/>
Проблема в том, что любой (даже все) из этих узлов может отсутствовать (например, 1.2 в примере). Таким образом, инструкция возвращает NaN!
Был бы признателен за хороший совет :)
Alex
2 ответа
В этом случае, поскольку это прямая сумма, вы можете просто сделать
<xsl:value-of select="sum(item[code=1.1 or code=1.2 or
code=1.3.1 or code=1.3.2]/amt)"/>
Вы можете использовать это при условии, что все amt
являются допустимыми десятичными знаками:
<xsl:value-of select="sum(item[starts-with(code, '1')]/amt)"/>
И если вы хотите суммировать только числа и опустить значения NaN (в случае их наличия), используйте это:
<xsl:value-of select="sum(item[starts-with(code, '1.') and number(amt)]/amt)"/>
Похожие вопросы
Связанные вопросы
Новые вопросы
xslt
XSLT - это язык преобразования XML, предназначенный для преобразования структурированных документов в другие форматы (например, XML, HTML и простой текст или, в XSLT 3, JSON). Вопросы должны использовать один из тегов xslt-1.0, xslt-2.0 или xslt-3.0 в зависимости от ситуации.