Как проверить, является ли переменная нулевой или пустой в XSLT?

Я определил следующие переменные:

<xsl:variable name="pica036E"
                        select="recordData/record/datafield[@tag='036E']" />
<xsl:variable name="pica036F"
                        select="recordData/record/datafield[@tag='036F']" />

Теперь мне нужно выполнить условие, если переменная pica036E не пуста, а pica036F пуста, показать следующее сообщение, в противном случае показать другое сообщение. Это мой код, но я не получаю вывод. Правильно ли определено значение "пустой или пустой"?

<xsl:choose>
                        <xsl:when test="$pica036E != '' and $pica036F = ''">
                        <xsl:message>
                         036F no 036E yes      
                            </xsl:message>
                        </xsl:when>

                         <xsl:otherwise>
                        <xsl:message>
                                036E no 036F yes
                            </xsl:message>  
                        </xsl:otherwise> 
                    </xsl:choose>  

3 ответа

Решение

В XPath X = Y означает (если некоторая пара x в X, y в Y удовлетворяет x = y), а X!= Y означает (если некоторая пара x в X, y в Y удовлетворяет x!= Y).

Это означает, что если X или Y - пустая последовательность, то оба X = Y и X!= Y ложны.

Например, $pica036E != '' проверяет, есть ли значение в $pica036E это не строка нулевой длины. Если нет значений в $pica036E тогда нет значения, удовлетворяющего этому условию.

В результате использование! = В XPath всегда является запахом кода. Обычно, а не X != Y, ты должен писать not(X = Y),

В XSLT переменная с текстовым содержимым также может служить логической переменной. Непустой контент означает истину, пустой контент означает ложь.

Таким образом, условие также может быть записано как:

<xsl:when test="$pica036E and not($pica036F)">

Помни что not это функция (не оператор).

Проверьте следующий код. Я думаю, что ваш вывод

<xsl:when test="not($pica036E = '') and $pica036F = ''">
Другие вопросы по тегам