¿Cómo concatizar una cadena a xsl: value-of select = "…?

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

¿Hay alguna forma de cancat otra cadena para

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

Necesito pasar algo de texto al atributo href además del valor de la propiedad del informe

Hanumanth
fuente

Respuestas:

148

Puede usar la función xpath con un nombre bastante sensato llamada concat aquí

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

Por supuesto, no tiene que ser texto aquí, puede ser otra expresión xpath para seleccionar un elemento o atributo. Y puede tener cualquier número de argumentos en la expresión concat.

Tenga en cuenta que puede hacer uso de las Plantillas de valor de atributo (representadas por las llaves) aquí para simplificar su expresión

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>
Tim C
fuente
2
@TimC: Bien, pero la concat()función no es necesaria aquí.
Dimitre Novatchev
Tengo la siguiente etiqueta: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>y me gustaría crear un campo oculto en XSLT que solo tome el número de identificación. ¿Cómo puedo lograrlo?
SearchForKnowledge
27

Tres respuestas:

Sencillo :

<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>

Atajo de atributos como lo sugiere @TimC

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />
Ninjanoel
fuente
2
Como señaló Dimitre, no necesita el concat aquí:<img src="{//your/xpath}vmLogo.gif" />
Svish
16

Utilizar :

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

La forma más fácil de concanear una cadena de texto estático a un valor seleccionado es 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>
DaviideNieve
fuente
1

El método más sencillo es

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

cuando la estructura XML es

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

No es la solución más legible, pero puede mezclar el resultado de un valor de con texto sin formato:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>
Khin
fuente
1
Esto tiene algunos problemas: entre las instrucciones XSLT, se ignoran los nodos de texto de los espacios en blanco; pero ahora que tiene un nodo de texto no solo de espacio en blanco ( ' Text'), se generará un espacio en blanco (incluso una nueva línea).
Alejandro