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.
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>
Utilização:
<img src="{normalize-space()}.jpg"/>
Isto assume que o elemento <img>
é o nó actual.
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. =)
<img>
<xsl:attribute name="src">
<xsl:value-of select="my_photo/@href" />
</xsl:attribute>
</img>
<my_photo href="folder/poster.jpg" />