使用 XSL 在 if 条件下在变量中设置值

Setting a value in a variable on if conditions using 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 returns。然后进行测试以检查它是否不为空并分配给 var PIC,如果它为空,则将值 placeholder.jpg 添加到 var PIC

现在由于某种原因我不断收到以下警告

A variable with no following sibling instructions has no effect

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

变量在 XSLT 中是不可变的,一旦设置就无法更改。 xsl:choose 中的变量声明只是在当前块的局部范围内的新声明。 (据说是"shadow"初始变量)。

你需要做的是这个...

<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 作为 <xsl:variable name="PIC" select="if (avatar != '') then avatar else 'placeholder.jpg'"/>