这是我的xslt代码:
<xsl:choose>
<xsl:when test="string-length(
//Record/CIMtrek_CI_OPEX_200910_FrDiv
/text())
!= 0">
<select size="1"
style="width:100%;"
name="CIMtrek_CI_OPEX_200910_FrDiv"
id="CIMtrek_CI_OPEX_200910_FrDiv">
<option>
<xsl:attribute name="selected">true</xsl:attribute>
<xsl:value-of select="//Record
/CIMtrek_CI_OPEX_200910_FrDiv
/text()" />
</option>
<option value="S M-SPED">S M-SPED</option>
<option value="S M-PPPVLD">S M-PPPVLD</option>
</select>
</xsl:when>
<xsl:otherwise>
<select size="1"
style="width:100%;"
name="CIMtrek_CI_OPEX_200910_FrDiv"
id="CIMtrek_CI_OPEX_200910_FrDiv">
<option value="0">Select Keywords</option>
<option value="S M-SPED">S M-SPED</option>
<option value="S M-PPPVLD">S M-PPPVLD</option>
</select>
</xsl:otherwise>
</xsl:choose>
但是当没有值的时候,条件总是存在。
我认为这是不确定的线路成本问题,
<xsl:when
test="string-length(
//Record/CIMtrek_CI_OPEX_200910_FrDiv/text()
) != 0">
如何解决这个问题?
答案 0 :(得分:1)
您没有显示错误产生输出的输入示例,但我猜测它涉及的XML可能如下所示:
<CIMtrek_CI_OPEX_200910_FrDiv>
<!--* no value here! *-->
</CIMtrek_CI_OPEX_200910_FrDiv>
如果您不希望元素中的空格计为值,则需要将测试从string-length(...) != 0
更改为string-length(normalize-space(...)) != 0
或等效值。由于XSLT将事物强制转换为布尔值,因此可以更简洁地编写为normalize-space(...)
- 一些熟练的XSLT程序员更喜欢这种形式,而其他人则发现隐式类型强制分散注意力并且更喜欢更明确的形式。
如果您的问题与我推测的一样,那么以下任何一项都应该有所帮助:
<xsl:when
test="string-length(
normalize-space(
//Record/CIMtrek_CI_OPEX_200910_FrDiv/text()
)
) != 0">
<xsl:when
test="normalize-space(
//Record/CIMtrek_CI_OPEX_200910_FrDiv/text()
) != ''">
<xsl:when
test="normalize-space(
//Record/CIMtrek_CI_OPEX_200910_FrDiv/text()
)">
如果那不是问题,那么你需要更清楚地了解你的问题。