как добавить атрибут xsl - PullRequest
4 голосов
/ 23 июля 2010

У меня есть XML с тегом img

<img>
source
</img>

Я хочу сгенерировать:

<img src="source.jpg">

Я пробовал что-то подобное:

<img>
<xsl:attribute name="src">
  <xsl:text>
        <xsl:value-of select="node()" />.jpg
      </xsl:text>
    </xsl:attribute>
</img> 

но это работает

Ответы [ 4 ]

5 голосов
/ 23 июля 2010

Используйте

<img src="{normalize-space()}.jpg"/>

Предполагается, что элемент <img> является текущим узлом.

4 голосов
/ 24 июля 2010

Причина , почему вы не работаете, состоит в том, что вы не можете оценить выражения XSLT внутри элемента <xsl:text>.

<xsl:text> может содержать только буквенный текст, ссылки на сущности и # PCDATA .

Если вы переместите <xsl:value-of> за пределы <xsl:text>, будет работать следующее:

    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="node()" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>

Однако, выбор <xsl:value-of select="node()> для <img> в вашем примере будет включать возврат каретки и пробельные символы внутри элемента <img>, что, вероятно, не то, что вы хотите в значении атрибута src.

Вот почему Димитр Новатчев использовал normalize-space() в своем ответе . Применяя это к примеру выше:

    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="normalize-space(node())" />
            <xsl:text>.jpg</xsl:text>
        </xsl:attribute>
    </img>

Если вы избавитесь от <xsl:text>, как подсказывает решение Фабиано , то вы также можете сделать это:

    <img>
        <xsl:attribute name="src"><xsl:value-of select="normalize-space(node())" />.jpg</xsl:attribute>
    </img> 
1 голос
/ 18 июля 2013
<img>
    <xsl:attribute name="src">
        <xsl:value-of select="my_photo/@href" />
    </xsl:attribute>
</img>

<my_photo href="folder/poster.jpg" /> 
1 голос
/ 23 июля 2010

Просто удалите тег xsl: text, в этом случае он вам не понадобится. Попробуйте это:

<img>   
    <xsl:attribute name="src">
        <xsl:value-of select="concat(node(), '.jpg')"/>
    </xsl:attribute>
</img>

Я не проверял это, но оно должно работать. =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...