Como concatar uma string para xsl: value-of select = "…?

92
<a>
    <xsl:attribute name="href"> 
     <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    </xsl:attribute>
</a>    

Existe alguma maneira de cancelar outra string para

<xsl:value-of select="/*/properties/property[@name='report']/@value"  />

Preciso passar algum texto para o atributo href, além do valor da propriedade do relatório

Hanumanth
fonte

Respostas:

148

Você pode usar a função xpath chamada concat aqui

<a>
   <xsl:attribute name="href">
      <xsl:value-of select="concat('myText:', /*/properties/property[@name='report']/@value)" />
   </xsl:attribute>
</a>  

Claro, não precisa ser texto aqui, pode ser outra expressão xpath para selecionar um elemento ou atributo. E você pode ter qualquer número de argumentos na expressão concat.

Observe, você pode fazer uso de modelos de valor de atributo (representados por chaves) aqui para simplificar sua expressão

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>
Tim C
fonte
2
@TimC: Bom, mas a concat()função não é necessária aqui.
Dimitre Novatchev
Eu tenho a seguinte tag: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>e gostaria de criar um campo oculto no XSLT que leva apenas o ID #. Como posso conseguir isso?
SearchForKnowledge
27

Três respostas:

Simples:

<img>
    <xsl:attribute name="src">
        <xsl:value-of select="//your/xquery/path"/>
        <xsl:value-of select="'vmLogo.gif'"/>
    </xsl:attribute>
</img>

Usando 'concat':

<img>
    <xsl:attribute name="src">
        <xsl:value-of select="concat(//your/xquery/path,'vmLogo.gif')"/>                    
    </xsl:attribute>
</img>

Atalho de atributo conforme sugerido por @TimC

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />
Ninjanoel
fonte
2
Conforme observado por Dimitre, você não precisa do concat aqui:<img src="{//your/xpath}vmLogo.gif" />
Svish
16

Use :

<a href="wantedText{/*/properties/property[@name='report']/@value)}"></a>
Dimitre Novatchev
fonte
5

A maneira mais fácil de concatenar uma string de texto estático a um valor selecionado é usar elemento.

<a>
  <xsl:attribute name="href"> 
    <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    <xsl:text>staticIconExample.png</xsl:text>
  </xsl:attribute>
</a>
DaviideSnow
fonte
1

O método mais fácil é

  <TD>
    <xsl:value-of select="concat(//author/first-name,' ',//author/last-name)"/>
  </TD>

quando a estrutura XML é

<title>The Confidence Man</title>
<author>
  <first-name>Herman</first-name>
  <last-name>Melville</last-name>
</author>
<price>11.99</price>
Marshall
fonte
0

Não é a solução mais legível, mas você pode misturar o resultado de um valor-de com texto simples:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>
Khin
fonte
1
Isso tem alguns problemas: entre as instruções XSLT, espaços em branco apenas os nós de texto são ignorados; mas agora que você não tem um espaço em branco, apenas o nó de texto ( ' Text'), o espaço em branco (mesmo uma nova linha) será gerado.
Alejandro