Comment concater une chaîne en xsl: value-of select = "…?

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

Existe-t-il un moyen d'annuler une autre chaîne pour

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

J'ai besoin de passer du texte à l'attribut href en plus de la valeur de la propriété du rapport

Hanumanth
la source

Réponses:

148

Vous pouvez utiliser la fonction xpath nommée assez judicieusement appelée concat ici

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

Bien sûr, il n'est pas nécessaire que ce soit du texte ici, cela peut être une autre expression xpath pour sélectionner un élément ou un attribut. Et vous pouvez avoir n'importe quel nombre d'arguments dans l'expression concat.

Notez que vous pouvez utiliser ici des modèles de valeur d'attribut (représentés par des accolades) pour simplifier votre expression

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>
Tim C
la source
2
@TimC: Bien, mais la concat()fonction n'est pas nécessaire ici.
Dimitre Novatchev
J'ai la balise suivante: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>et je voudrais créer un champ caché dans XSLT qui ne prend que l'ID #. Comment puis-je y parvenir?
SearchForKnowledge
27

Trois réponses:

Facile :

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

Utilisation de 'concat':

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

Raccourci d'attribut comme suggéré par @TimC

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />
Ninjanoel
la source
2
Comme indiqué par Dimitre, vous n'avez pas besoin du concat ici:<img src="{//your/xpath}vmLogo.gif" />
Svish
16

Utilisez :

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

Le moyen le plus simple de concaténer une chaîne de texte statique à une valeur sélectionnée consiste à utiliser élément.

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

La méthode la plus simple est

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

lorsque la structure XML est

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

Ce n'est pas la solution la plus lisible, mais vous pouvez mélanger le résultat d'une valeur de avec du texte brut:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>
Khin
la source
1
Cela pose quelques problèmes: entre les instructions XSLT, les espaces blancs seuls les nœuds de texte sont ignorés; mais maintenant que vous avez un noeud de texte non seulement un espace blanc ( ' Text'), un espace blanc (même une nouvelle ligne) sera affiché.
Alejandro