Выбранный атрибут в раскрывающемся списке xsl

Я видел здесь похожие вопросы и решения, но ничего из того, что я пробовал, не помогло. Я пытаюсь создать раскрывающийся список названий месяцев с параметром / result / startMonthName в качестве параметра по умолчанию.

<select id="queryMonth">
<xsl:for-each select="/result/monthOptions/entry">
    <option value="{key + 1}">
        <xsl:value-of select="value"/>
        <xsl:if test="/result/startMonthName">
            <xsl:attribute name="selected">selected</xsl:attribute>
        </xsl:if>
    </option>
</xsl:for-each>
</select>

Однако первым всегда выбирается первый месяц. Результат monthOptions представляет собой узел значений (названия месяцев) и ключей (целые числа месяца от 0 до 11). Я пробовал использовать как xsl: if test = "/ result / startMonthName", так и xsl: if test = "/ result / startMonth".

Я обнаружил, что если

<xsl:value-of select="value"/> 

линия после

<xsl:if test="/result/startMonthName">
    <xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>

тогда последний месяц всегда выбирается изначально, но никогда не startMonth.

0
0
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Все, что делает <xsl:if test="/result/startMonthName">, это проверяет, существует ли узел startMonthName, а не его значение.

Тебе, наверное, стоит это сделать ...

<xsl:if test="value = /result/startMonthName">

Кроме того, вам необходимо отменить операторы xsl:if и xsl:value-of, поскольку создание атрибута в элементе после создания дочернего узла считается ошибкой.

<option value="{key + 1}">
    <xsl:if test="value = /result/startMonthName">
        <xsl:attribute name="selected">selected</xsl:attribute>
    </xsl:if>
    <xsl:value-of select="value"/>
</option>

(Что, вероятно, происходило, так это то, что процессор XSLT был выбран просто так, чтобы просто не добавлять атрибут в случае, если у вас были инструкции наоборот, а не отмечать ошибку, в результате чего не было выбрано никаких параметров. Затем браузер просто выберет первый вариант по умолчанию).

Спасибо, сработало! Раньше у меня был test="value = result/startMonthName", но не раньше xsl:value-of.

djs-simon 31.10.2018 14:28

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