Если вам нужно только суммировать числа, следующий шаблон XSLT 1.0 add
принимает «плюс разделенную строку» в качестве аргумента и возвращает сумму.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template name="add">
<xsl:param name="plusSeparatedString"/>
<xsl:param name="sumValue" select="0"/>
<xsl:choose>
<xsl:when test="contains($plusSeparatedString,'+')">
<xsl:call-template name="add">
<xsl:with-param name="plusSeparatedString" select="substring-after($plusSeparatedString,'+')"/>
<xsl:with-param name="sumValue" select="$sumValue + substring-before($plusSeparatedString,'+')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$sumValue + $plusSeparatedString"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="add">
<xsl:with-param name="plusSeparatedString" select="'4 + 6+ 8'"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
Применить эту таблицу стилей к любому документу (например, самому себе), чтобы увидеть, как он работает.
Как [этот вопрос] (http://stackoverflow.com/questions/10046104/xsl-evaluate-expression). – nwellnhof
@nwellnhof Я понимаю: «Оценить» не является допустимой ссылкой на объект. Я включил пространство имен dynames – zerzer
Думаю, вам нужно предоставить более подробную информацию: какая версия XSLT? Какой XSLT-процессор (ы)? Какие вычисления вы хотите выполнить? Кажется, у вас нет уравнений (т. Е. Что-то вроде 'a^2 + b^2 = c^2'), а только термины с действительными числами и без символов, верно? Какие операции у вас есть? У вас есть скобки? Нужно ли поддерживать правильный приоритет оператора? –