在我的xsl文件中,我有这个:
<xsl:choose>
<xsl:when test="$search_resource = 'people'">
<xsl:variable name="search__url"><xsl:value-of select="$search_url"/>employees</xsl:variable>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="search__url"><xsl:value-of select="$search_url"/></xsl:variable>
otherwise
</xsl:otherwise>
</xsl:choose>
<form id="searchForm_valeo" action="{$search__url}"></form>
但查看页面后出现此错误:
XSLTApplyError: Internal error: Failed to evaluate the AVT of attribute 'action'.
我试图打印变量的值,这是正确的。但是要将其添加为表单元素的action属性值,我得到了错误
我甚至试图使用这个action="{search__url}"
和这个:action="{@search__url}"
,但我的动作属性为空。任何根本原因的想法?
答案 0 :(得分:1)
问题是您的变量是有条件创建的。 XSLT编译器不会那样,因为它会认为变量在某些情况下可能不存在。
相反,只考虑变量的值,而不是它的存在。
<xsl:variable name='search__url'>
<xsl:choose>
<xsl:when test="$search_resource = 'people'">
<xsl:value-of select="$search_url"/>employees
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$search_url"/>
otherwise
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 1 :(得分:1)
您在$search__url
内定义choose
,不会在其外定义。{1}}尝试重新排列元素:
<xsl:variable name="search__url">
<xsl:choose>
<xsl:when test="$search_resource = 'people'"><xsl:value-of select="$search_url"/>employees</xsl:when>
<xsl:otherwise><xsl:value-of select="$search_url"/>otherwise</xsl:otherwise>
</xsl:choose>
</xsl:variable>
我将otherwise
字符串留在<xsl:otherwise/>
内,但我不确定您是否打算这样做。另外,部分基于$search__url
定义$search_url
非常令人困惑,您可能希望使用更具表现力的变量名称。