2010-07-23 190 views
3

我有img標籤的XML如何添加XSL屬性

<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> 

但doesng工作

+0

問得好(+1)。看到我的答案是一個簡短而簡單的解決方案。 – 2010-07-23 18:18:34

回答

4

原因爲什麼你在做什麼不起作用的是,你不能評估<xsl:text>元素內的XSLT表達式。

<xsl:text> can only contain literal text, entity references, and #PCDATA

如果移動<xsl:value-of><xsl:text>的,那麼下面的工作:

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

但是,對於您的示例<img>選擇<xsl:value-of select="node()>將包括回車和<img>元素內的空白字符,這可能不是你想要的src屬性值。

這就是爲什麼Dimitre Novatchev used normalize-space() in his answer。將其應用於上面的例子:

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

如果您擺脫<xsl:text>Fabiano's solution建議,那麼你也可以這樣做:

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

使用

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

這假定<img>元件是當前節點。

+2

我是一個近期轉換爲​​屬性值模板的人,我認爲它們非常有用,並且在適用的地方提供簡潔易讀的代碼。我建議所有XSL新人進行調查:http://www.w3.org/TR/xslt#attribute-value-templates – arooaroo 2013-06-23 09:25:11

+0

@arooaroo,是的,完全同意。 – 2013-06-23 16:33:55

1

只需刪除標籤xsl:text,在這種情況下,您將不需要它。試試這個:

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

我沒有測試它,但它應該工作。 =)

+0

它會「工作」,但會包含空白文本節點,生成「」,這可能不是@liysd想要的。使用normalize-space()作爲@Dimitre Novatchev建議會讓你的答案成爲有效的答案。 – 2010-07-24 03:00:10

1
<img> 
    <xsl:attribute name="src"> 
     <xsl:value-of select="my_photo/@href" /> 
    </xsl:attribute> 
</img> 

<my_photo href="folder/poster.jpg" />