@michael.hor257k - . .
, format-number , xsl:choose, , field (, xsl:choose).
XML
<?xml version="1.0" encoding="utf-8"?>
<fields>
<pair>
<field name="value1">2</field>
<field name="value2">3</field>
</pair>
<pair>
<field name="value1">"2"</field>
<field name="value2">"3"</field>
</pair>
<pair>
<field name="value1"/>
<field name="value2"/>
</pair>
</fields>
Stylesheet
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/fields">
<xsl:for-each select="pair">
<xsl:variable name="summands">
<xsl:for-each select="field">
<field>
<xsl:choose>
<xsl:when test="number(.) != .">0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</field>
</xsl:for-each>
</xsl:variable>
<result-a>
<xsl:value-of select="sum($summands/field)"/>
</result-a>
</xsl:for-each>
<xsl:apply-templates select="//pair" mode="b"/>
</xsl:template>
<xsl:decimal-format name="coerce" NaN="0" />
<xsl:template match="pair" mode="b">
<xsl:variable name="a" select="format-number(field[1], '#', 'coerce')"/>
<xsl:variable name="b" select="format-number(field[2], '#', 'coerce')"/>
<result-b>
<xsl:value-of select="$a + $b"/>
</result-b>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<result-a>5</result-a>
<result-a>0</result-a>
<result-a>0</result-a>
<result-b>5</result-b>
<result-b>0</result-b>
<result-b>0</result-b>