Переменные XSLT не имеют значений обратно

Я объявляю 2 переменные и заполняю их выбором. Я хочу проверить их после этого с помощью ifs, но я получил только две ошибки, и я не знаю, откуда они.

Я пытался изменить операторы if, но ничего не работает.

        <root>
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiPfad'">
                    <xsl:variable name="Con1">
                        2001
                    </xsl:variable>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="Con1">
                        2000
                    </xsl:variable>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiName'">
                    <xsl:variable name="Con2">
                        2001
                    </xsl:variable>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="Con2">
                        2000
                    </xsl:variable>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:if test="$Con1 == 2001 and $Con2 == 2001">
            <xsl:processing-instruction name="ConditionState">
                    2001
                </xsl:processing-instruction>
            </xsl:if>
            <xsl:if test="$Con1 == 2000 and $Con2 == 2000">
                <xsl:processing-instruction name="ConditionState">
                    2000
                </xsl:processing-instruction>
            </xsl:if>
        </root>

Я ожидаю, что результат ЕСЛИ даст мне 2000 или 2001 год в качестве состояния состояния, которое мне нужно в моем процессе...

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переменные привязаны к блоку, в котором они объявлены, что означает, что в вашем случае они существуют только в блоках xsl:whenxsl:otherwise) и недоступны за их пределами.

Что вы можете сделать, так это поместить xsl:choose внутрь xsl:variable вместо этого.

<xsl:template match="/">
    <root>
        <xsl:variable name="Con1">
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiPfad'">2001</xsl:when>
                <xsl:otherwise>2000</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="Con2">
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiName'">2001</xsl:when>
                <xsl:otherwise>2000</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:if test="$Con1 = 2001 and $Con2 = 2001">
            <xsl:processing-instruction name="ConditionState">
                2001
            </xsl:processing-instruction>
        </xsl:if>
        <xsl:if test="$Con1 = 2000 and $Con2 = 2000">
            <xsl:processing-instruction name="ConditionState">
                2000
            </xsl:processing-instruction>
        </xsl:if>
    </root>
</xsl:template>   

Конечно, в показанном вами примере вам вообще не нужен xsl:variable...

<xsl:template match="/">
    <root>
        <xsl:if test="Request/Query/Parameter = 'DateiPfad' and Request/Query/Parameter = 'DateiName'">
            <xsl:processing-instruction name="ConditionState">
                2001
            </xsl:processing-instruction>
        </xsl:if>
        <xsl:if test="not(Request/Query/Parameter = 'DateiPfad') and not(Request/Query/Parameter = 'DateiName')">
            <xsl:processing-instruction name="ConditionState">
                2000
            </xsl:processing-instruction>
        </xsl:if>
    </root>
</xsl:template> 

вау xD это было так просто ... мне стыдно ... я бы сейчас похоронил себя :D что бы то ни было xD Спасибо

user10577559 22.05.2019 16:00

Также обратите внимание, что в вашем XSLT была синтаксическая ошибка, поскольку вы делали $Con1 == 2000 (с двумя равными) вместо $Con1 = 2000

Tim C 22.05.2019 16:05

Другие вопросы по теме