我在这里看到了类似的问题和解决方案,但没有尝试过。我正在尝试使用/ 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)
所有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处理器只是不添加属性,而不是标记错误,导致没有选择任何选项。然后浏览器只需默认选择第一个选项即可。