2015-02-25 3 views
0

У меня есть фрагмент XML, как этотXSLT добавить не существующие узлы

<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

ответ

1

В этом случае, поскольку это прямая сумма, которую вы могли бы просто сделать

<xsl:value-of select="sum(item[code=1.1 or code=1.2 or 
           code=1.3.1 or code=1.3.2]/amt)"/> 
+0

Спасибо, Ян, отлично поработал для меня! –

1

Вы можете использовать это при условии, все 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)"/> 
+0

Спасибо Lingamurthy, это тоже хорошо работало. Хотя ответ Яна немного лучше для моей цели. –

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