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

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>

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')}" />

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


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>

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>

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>

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.