如何添加XSL属性
我有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工作
该原因为什么你在做什么不起作用的是,你不能评估<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>
为F*o's solution建议,那么你也可以这样做:
<img>
<xsl:attribute name="src"><xsl:value-of select="normalize-space(node())" />.jpg</xsl:attribute>
</img>
使用:
<img src="{normalize-space()}.jpg"/>
这假定<img>
元件是当前节点。
我是一个近期转换为属性值模板的人,我认为它们非常有用,并且在适用的地方提供简洁易读的代码。我建议所有XSL新人进行调查:http://www.w3.org/TR/xslt#attribute-value-templates – arooaroo 2013-06-23 09:25:11
@arooaroo,是的,完全同意。 – 2013-06-23 16:33:55
只需删除标签xsl:text,在这种情况下,您将不需要它。试试这个:
<img>
<xsl:attribute name="src">
<xsl:value-of select="concat(node(), '.jpg')"/>
</xsl:attribute>
</img>
我没有测试它,但它应该工作。 =)
它会“工作”,但会包含空白文本节点,生成“”,这可能不是@liysd想要的。使用normalize-space()作为@Dimitre Novatchev建议会让你的答案成为有效的答案。 – 2010-07-24 03:00:10
<img>
<xsl:attribute name="src">
<xsl:value-of select="my_photo/@href" />
</xsl:attribute>
</img>
<my_photo href="folder/poster.jpg" />
问得好(+1)。看到我的答案是一个简短而简单的解决方案。 – 2010-07-23 18:18:34