Jak połączyć ciąg z xsl: value-of select = "…?

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

Czy istnieje sposób, aby usunąć inny ciąg znaków

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

Muszę przekazać jakiś tekst do atrybutu href oprócz wartości właściwości raportu

Hanumanth
źródło

Odpowiedzi:

151

Można użyć dość sensownie nazwie funkcji xpath nazwie concat tutaj

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

Oczywiście nie musi to być tekst, może to być inne wyrażenie xpath, aby wybrać element lub atrybut. W wyrażeniu konkatencyjnym możesz mieć dowolną liczbę argumentów.

Zwróć uwagę, że możesz skorzystać z szablonów wartości atrybutów (reprezentowanych przez nawiasy klamrowe), aby uprościć swoje wyrażenie

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>
Tim C.
źródło
2
@TimC: Dobrze, ale ta concat()funkcja nie jest tutaj potrzebna.
Dimitre Novatchev
Mam następujący tag: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>i chciałbym utworzyć ukryte pole w XSLT, które przyjmuje tylko ID #. Jak mogę to osiągnąć?
SearchForKnowledge
27

Trzy odpowiedzi:

Prosty :

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

Korzystanie z „concat”:

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

Skrót do atrybutu zgodnie z sugestią @TimC

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />
Ninjanoel
źródło
2
Jak zauważył Dimitre, konkat nie jest potrzebny tutaj:<img src="{//your/xpath}vmLogo.gif" />
Svish
16

Zastosowanie :

<a href="wantedText{/*/properties/property[@name='report']/@value)}"></a>
Dimitre Novatchev
źródło
5

Najłatwiejszym sposobem połączenia statycznego ciągu tekstowego z wybraną wartością jest użycie element.

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

Najłatwiejsza metoda to

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

kiedy struktura XML jest

<title>The Confidence Man</title>
<author>
  <first-name>Herman</first-name>
  <last-name>Melville</last-name>
</author>
<price>11.99</price>
Marshall
źródło
0

Nie jest to najbardziej czytelne rozwiązanie, ale możesz połączyć wynik z wartości-of ze zwykłym tekstem:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>
Khin
źródło
1
Wiąże się to z pewnymi problemami: między instrukcjami XSLT ignorowane są tylko białe znaki węzłów tekstowych; ale teraz, gdy masz węzeł tekstowy (nie tylko spacji ' Text'), zostaną wyprowadzone białe znaki (nawet nowa linia).
Alejandro