como adicionar o atributo xsl

tenho um xml com marca img

<img>
source
</img>

quero gerar:

<img src="source.jpg">
Eu tentei algo assim.
<img>
<xsl:attribute name="src">
  <xsl:text>
        <xsl:value-of select="node()" />.jpg
      </xsl:text>
    </xsl:attribute>
</img> 
Mas funciona.
Author: liysd, 2010-07-23

4 answers

A razão porque o que estás a fazer não funciona é porque não consegues avaliar as expressões XSLT dentro do elemento <xsl:text>.

<xsl:text> só pode conter texto literal, referências de Entidades e #PCDATA.

Se mover o <xsl:value-of> para fora do <xsl:text>, então o seguinte irá funcionar:

    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="node()" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>

Contudo, se seleccionar <xsl:value-of select="node()> para o <img> no seu exemplo, irá incluir os caracteres 'carriage returns' e 'whitespace' dentro do <img> elemento, que provavelmente não é o que você quer no seu valor do atributo src.

É por isso que Dimitre Novatchev usounormalize-space() na sua resposta . Aplicando isto ao exemplo acima:

    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="normalize-space(node())" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>

Se você se livrar do <xsl:text> Como a solução de Fabiano {[[22]} sugere, então você também pode fazer isso:

    <img>
        <xsl:attribute name="src"><xsl:value-of select="normalize-space(node())" />.jpg</xsl:attribute>
    </img> 
 4
Author: Mads Hansen, 2017-05-23 10:27:43

Utilização:

<img src="{normalize-space()}.jpg"/>

Isto assume que o elemento <img> é o nó actual.

 5
Author: Dimitre Novatchev, 2010-07-23 18:16:50

Basta remover a tag xsl: text, neste caso, você não vai precisar dela. Tente isto:

<img>   
    <xsl:attribute name="src">
        <xsl:value-of select="concat(node(), '.jpg')"/>
    </xsl:attribute>
</img>
Não o testei, mas deve funcionar. =)
 1
Author: Fabiano, 2010-07-23 18:20:48
<img>
    <xsl:attribute name="src">
        <xsl:value-of select="my_photo/@href" />
    </xsl:attribute>
</img>

<my_photo href="folder/poster.jpg" /> 
 1
Author: Ashish Neupane, 2013-07-18 15:31:17