Xslt 使用XSL在if条件上设置变量中的值

Xslt 使用XSL在if条件上设置变量中的值,xslt,xslt-2.0,Xslt,Xslt 2.0,我有一个基本条件,检查变量是否为空,以及是否将变量设置为一个特定值 <xsl:variable name="PIC" select="avatar"/> <xsl:choose> <xsl:when test="avatar !=''"> <xsl:variable name="PIC" select="avatar"/> </xsl:when> <xsl:otherwise> <xsl:

我有一个基本条件,检查变量是否为空,以及是否将变量设置为一个特定值

<xsl:variable name="PIC" select="avatar"/>

<xsl:choose>
  <xsl:when test="avatar !=''">
    <xsl:variable name="PIC" select="avatar"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:variable name="PIC" select="'placeholder.jpg'"/>
  </xsl:otherwise>
</xsl:choose>

基本上,var PIC被设置为
avatar
返回的任何内容。然后进行测试,检查它是否为空并分配给var
PIC
,如果为空,则将值
占位符添加到var
PIC

现在出于某种原因,我不断得到以下警告

没有以下同级指令的变量无效


关于我这里做错了什么,你有什么想法吗?

变量在XSLT中是不可变的,一旦设置好就不能更改。
xsl:choose
中的变量声明只是在当前块的局部范围内的新声明。(它们被称为初始变量的“阴影”)

你需要做的是

<xsl:variable name="PIC">
   <xsl:choose>
     <xsl:when test="avatar !=''">
        <xsl:value-of select="avatar"/>
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="'placeholder.jpg'"/>
     </xsl:otherwise>
   </xsl:choose>
</xsl:variable>


使用单个
xsl:variable
,因为
今天学到了一些新东西,感谢您在示例背后的详细解释,非常感谢。