2010-07-23 155 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" />