I have an xml with img tag
<img>
source
</img>
I want to generate:
<img src="source.jpg">
I tried something like that:
<img>
<xsl:attribute name="src">
  <xsl:text>
        <xsl:value-of select="node()" />.jpg
      </xsl:text>
    </xsl:attribute>
</img> 
but it doesng work
Use:
<img src="{normalize-space()}.jpg"/>
This assumes the <img> element is the current node.
The reason why what you are doing does not work is that you cannot evaluate XSLT expressions inside of the <xsl:text> element.
<xsl:text> can only contain literal text, entity references, and #PCDATA.
If you move the <xsl:value-of> outside of the <xsl:text>, then the following will work:
    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="node()" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>
However, selecting <xsl:value-of select="node()> for the <img> in your example will include the carriage returns and whitespace characters inside of the <img> element, which is probably not what you want in your src attribute value. 
That is why Dimitre Novatchev used normalize-space() in his answer. Applying that to the example above:
    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="normalize-space(node())" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>
If you get rid of the <xsl:text> as Fabiano's solution suggests, then you could also do this:
    <img>
        <xsl:attribute name="src"><xsl:value-of select="normalize-space(node())" />.jpg</xsl:attribute>
    </img> 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With