2014-01-11 3 views
0

Я это простая строка хранится в переменной:вычислить строку как уравнение в XSL

<xsl:variable name="equation"> 
    15+10+32+98 
</xsl:variable> 

и я хочу для XSL, чтобы принять строку, хранящуюся в этой переменной и иметь дело с, как математические уравнения, чтобы получить В результате есть предложения?

+0

Как [этот вопрос] (http://stackoverflow.com/questions/10046104/xsl-evaluate-expression). – nwellnhof

+0

@nwellnhof Я понимаю: «Оценить» не является допустимой ссылкой на объект. Я включил пространство имен dynames – zerzer

+0

Думаю, вам нужно предоставить более подробную информацию: какая версия XSLT? Какой XSLT-процессор (ы)? Какие вычисления вы хотите выполнить? Кажется, у вас нет уравнений (т. Е. Что-то вроде 'a^2 + b^2 = c^2'), а только термины с действительными числами и без символов, верно? Какие операции у вас есть? У вас есть скобки? Нужно ли поддерживать правильный приоритет оператора? –

ответ

1

Если вам нужно только суммировать числа, следующий шаблон 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> 

Применить эту таблицу стилей к любому документу (например, самому себе), чтобы увидеть, как он работает.

+0

Большое вам спасибо! он отлично работает – zerzer

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