Как связать строку с xsl: value-of select = "…?

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

Есть ли способ передать другую строку в

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

Мне нужно передать текст в атрибут href в дополнение к значению свойства отчета

Хануман
источник

Ответы:

150

Вы можете использовать довольно толково функцию с именем XPATH под названием CONCAT здесь

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

Конечно, здесь не обязательно должен быть текст, это может быть другое выражение xpath для выбора элемента или атрибута. И вы можете иметь любое количество аргументов в выражении concat.

Обратите внимание: здесь вы можете использовать шаблоны значений атрибутов (представленные фигурными скобками), чтобы упростить ваше выражение.

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>
Тим С
источник
2
@TimC: Хорошо, но эта concat()функция здесь не нужна.
Димитр Новачев
У меня есть следующий тег: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>и я хотел бы создать скрытое поле в XSLT, которое принимает только ID #. Как я могу этого добиться?
SearchForKnowledge
27

Три ответа:

Просто :

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

Использование concat:

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

Ярлык атрибута, предложенный @TimC

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />
Ниндзяноэль
источник
2
Как заметил Димитр, здесь concat не нужен:<img src="{//your/xpath}vmLogo.gif" />
Svish
16

Использование :

<a href="wantedText{/*/properties/property[@name='report']/@value)}"></a>
Димитр Новачев
источник
5

Самый простой способ связать статическую текстовую строку с выбранным значением - использовать элемент.

<a>
  <xsl:attribute name="href"> 
    <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    <xsl:text>staticIconExample.png</xsl:text>
  </xsl:attribute>
</a>
DaviideSnow
источник
1

Самый простой способ -

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

когда структура XML

<title>The Confidence Man</title>
<author>
  <first-name>Herman</first-name>
  <last-name>Melville</last-name>
</author>
<price>11.99</price>
Маршалл
источник
0

Не самое читабельное решение, но вы можете смешать результат значения с обычным текстом:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>
Хин
источник
1
Здесь есть некоторые проблемы: между инструкциями XSLT игнорируются только текстовые узлы с пробелами; но теперь, когда у вас есть не только текстовый узел ( ' Text'), но и пробел (даже новая строка), будет выводиться.
Алехандро