如何使用元素数据的值作为html属性?

时间:2014-05-12 13:52:26

标签: xslt

在我的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}",但我的动作属性为空。任何根本原因的想法?

2 个答案:

答案 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非常令人困惑,您可能希望使用更具表现力的变量名称。