Если тест на NaN - PullRequest
       6

Если тест на NaN

1 голос
/ 25 июня 2019

У меня есть шаблон xsl с кодом

 <xsl:if test="(base_extra_fee_rule_amount='75.0000')">

Но я хочу, чтобы код выполнялся, если есть какое-либо значение для этого поля, или не запускал код, если поле имеет значение NaN

Я попробовал вариации

<xsl:if test="not(base_extra_fee_rule_amount='NaN')">

Но это не сработает, есть ли простой способ добиться этого?

Ответы [ 3 ]

2 голосов
/ 25 июня 2019

Самый простой способ проверить, является ли X NaN равным (X=X), потому что только если X равен NaN, это выражение вернет false.

Если вы хотите более читаемое выражение, тогда string(number(X))='NaN' делаетзадание.

Обратите внимание, однако, что операнд base_extra_fee_rule_amount возвращает либо узел элемента, либо ничего.Только значение типа number может быть NaN, поэтому элемент не будет NaN, пока вы не попытаетесь преобразовать его в число.Это может происходить явно или неявно, и детали зависят от того, используете ли вы XSLT 1.0 или 2.0, и в последнем случае от того, поддерживает ли он схему.На данном этапе не совсем понятно, какой тест вы хотите применить.Вас интересует, имеет ли элемент строковое значение «NaN», или вам интересно проверить, имеет ли он значение, которое не является числом?

2 голосов
/ 25 июня 2019

Не уверен, что ваша цель здесь.

Как правило, вы можете выбрать / сопоставить узлы с допустимыми числовыми значениями, используя предикат - например:

<xsl:template match="amount[number()=number()]">
0 голосов
/ 25 июня 2019

PaddyD: -

Спасибо за уведомление: -

    <xsl:template match="base_extra_fee_rule_amount!=''"> <xsl:text>@@@@</xsl:text> </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...