Установите переменную XSL со значением, созданным скриптом - PullRequest
0 голосов
/ 21 июня 2020

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

            <xsl:variable name="Value">
            
            <script type="text/javascript">
                var DistX = <xsl:value-of select="DistX"/>;
                var DistY = <xsl:value-of select="DistY"/>;
                var PadSize = <xsl:value-of select="PadSize"/>;
                var Value = Math.trunc(Math.sqrt(((DistX/PadSize*100) * (DistX/PadSize*100))  +    ((DistY/PadSize*100) * (DistY/PadSize*100))   ),0.1);
               document.write(Value);
                       console.log(Value);              
            </script>
            
            </xsl:variable>
                
            <xsl:value-of select="$Value"></xsl:value-of>

Результат этого отображения в таблице <td>:

var DistX = 0.9;
var DistY = 0.3;
var PadSize = 2.6;
var Value = Math.trunc(Math.sqrt(((DistX/PadSize*100) * (DistX/PadSize*100)) + ((DistY/PadSize*100) * (DistY/PadSize*100)) ),0.1);
document.write(Value);
console.log(Value);

и не вычисляется значение 54% Я хочу сделать оператор if для этого значения, чтобы изменить цвет шрифта.

плохое отображение

хорошее отображение, созданное с помощью силы рисования; )

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Предполагая, что вы используете XSLT в браузере, вы можете выполнить обновление до XSLT 3.0 с помощью Saxon- JS, а затем сделать все это в XSLT (Javascript не требуется), написав

    <xsl:variable name="Value" select="round(math:sqrt(((DistX/PadSize*100) *
      (DistX/PadSize*100)) + ((DistY/PadSize*100) * (DistY/PadSize*100))))"/>

(Кажется, вы вызываете Math.trun c () с двумя аргументами, я не уверен, что именно он делает, но будет эквивалент XPath).

0 голосов
/ 21 июня 2020

Обычно XSLT выполняется до и независимо от любого выполнения JavaScript, поэтому любая последовательность, которая может иметь смысл, заключается в простом создании элемента сценария, выполняющего вычисления и выводящего его вычисленное значение:

      <script type="text/javascript">
            var DistX = <xsl:value-of select="DistX"/>;
            var DistY = <xsl:value-of select="DistY"/>;
            var PadSize = <xsl:value-of select="PadSize"/>;
            var Value = Math.trunc(Math.sqrt(((DistX/PadSize*100) * (DistX/PadSize*100))  +    ((DistY/PadSize*100) * (DistY/PadSize*100))   ),0.1);
           document.write(Value);
        </script>

без его вложенности в xsl:variable.

Обратите внимание, что document.write не поддерживается в клиентском скрипте в браузерах Mozilla, если XSLT также запускается на стороне клиента (например, с <?xml-stylesheet?> pi).

...