XSL下拉选择的属性

时间:2018-10-31 12:49:51

标签: xslt

我在这里看到了类似的问题和解决方案,但没有尝试过。我正在尝试使用/ 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。

1 个答案:

答案 0 :(得分:0)

所有CREATE TYPE Output AS OBJECT (str VARCHAR2 (20)); CREATE TYPE OutputTable AS TABLE OF Output; CREATE OR REPLACE FUNCTION ufn_CSVToTable (p_StringInput VARCHAR2) RETURN OutputTable AS v_String VARCHAR2 (20); v_StringInput VARCHAR2 (8000); BEGIN WHILE LENGTH (RTRIM (p_StringInput)) > 0 LOOP v_String := SUBSTR ( p_StringInput, 1, NVL (NULLIF (INSTR (p_StringInput, ',') - 1, -1), LENGTH (RTRIM (p_StringInput)))); v_StringInput := SUBSTR ( p_StringInput, NVL (NULLIF (INSTR (p_StringInput, ','), 0), LENGTH (RTRIM (p_StringInput))) + 1, LENGTH (RTRIM (p_StringInput))); INSERT INTO Output (str) VALUES (v_String); END LOOP; RETURN; END; 所做的都是检查<xsl:if test="/result/startMonthName">节点是否存在,而不是其值是什么。

您可能应该这样做...

startMonthName

此外,您确实需要反转<xsl:if test="value = /result/startMonthName"> xsl:if语句,因为在创建子节点之后在元素上创建属性被认为是错误的。

xsl:value-of

(可能发生的事情是,如果您有相反的说法,则选择XSLT处理器只是不添加属性,而不是标记错误,导致没有选择任何选项。然后浏览器只需默认选择第一个选项即可。