2015-07-28 12 views
0

Я пытаюсь обновить свои данные XML на основе некоторых логических переменных javascript в XSLT, я не уверен, что это лучший способ его использовать. Я пробовал код ниже, но кажется, что он не работает. Не могли бы вы помочь мне.Как проверить javascript boolean значение в XSLT

Javascript:

<msxsl:script language="JScript" implements-prefix="usr"> 
    <![CDATA[ 
      var FDAttempt = false; 
      function setFDAttemptTrue() 
      { 
       FDAttempt = true; 
      } 
      function getFDAttempt() 
      { 
       return FDAttempt; 
      } 
     ]]> 
</msxsl:script> 

Установка переменной в одном из шаблонов

<xsl:template name="FDTemplate"> 
    <xsl:if test ="usr:setFDAttemptTrue()" /> 
    <Tran> 
    <TranName>FDAttempt</TranName> 
    <Result>Forced</Result> 
    </Tran> 
</xsl:template> 

Проверка булево значение: Является ли это правильный способ проверить

<xsl:when test ="Content/Journal"> 
    <xsl:variable name="x" select ="Content/*[1]" /> 
    <xsl:variable name="ForcedAttempt" select="usr:getFDAttempt()" /> 

    <xsl:if test ="$x/Name='Complete' and $x/Details='Error' and $ForcedAttempt='false'"> 
     <OutPut> 
      <Name>SDM</Name> 
      <Location>Transport</Result> 
     </OutPut> 
     </xsl:if> 

</xsl:when> 
+0

Какой XSLT-процессор вы используете? Вместо 'и $ ForcedAttempt = 'false'' я бы использовал', а не ($ ForcedAttempt) '. Но будет ли какая-либо из этих попыток поддерживать состояние в переменной сценария расширения работать очень сильно зависит от реализации. –

+0

@ Мартин Хоннен, Спасибо за ваш быстрый ответ. Я использую XSLT 1.0. Я попробую исправить. –

+0

@Martin Honnen. Извините, что ответили в последнее время. Я попытался с $ ForcedAttempt, и он отлично работал, и это не вызывает проблемы с муравьями. Благодарю. –

ответ

0

Программирование XSLT-кода, который пытается избежать побочных эффектов, - это постоянная битва с оптимизатором. Вы вполне вероятно найти, что инструкция, как

<xsl:if test ="usr:setFDAttemptTrue()" /> 

получает оптимизированный прочь, потому что она производит пустой результат или нет истинно проверяемое условие.

И ваш пример на самом деле не убеждает меня в том, что использование функций расширения и побочных эффектов необходимо для решения проблемы, которую вы решаете. (Я бы с большей вероятностью был убежден, если бы вы описали проблему.) Насколько я могу судить, то, что вы делаете, может быть достигнуто с помощью простых механизмов /xsl:with-param.

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