我在Symphony CMS中尝试返回类似的文章图片。
<img src="{$workspace}/uploads/{/data/news-articles/entry/image-thumbnail}"/>
输出看起来像这样
<img src="/workspace/uploads/%0A%09%09%09%09penuts_thumb.png%0A%09%09%09%09%0A%09%09%09">
如果我只是尝试返回节点值
<xsl:value-of select="image-thumbnail" />
输出看起来正确
penuts_thumb.png
为什么我会得到所有多余的角色?
答案 0 :(得分:5)
Output looks correct
不,它只是“看起来正确”,,因为浏览器会忽略空格字符。
会发生的是字符串"penuts_thumb.png"
被空白包围。当此空白被序列化为src
属性值的一部分时,它将被编码(规范化) - 这就是为什么您看到%0A
(换行代码)anf %09
(标签代码) )。
此转换有助于准确了解每种情况下生成的内容:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:variable name="workspace" select="'/workspace'"/>
<xsl:template match="/">
<img src="{$workspace}/uploads/{/data/news-articles/entry/image-thumbnail}"/>
===========
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="entry">
"<xsl:value-of select="image-thumbnail"/>"
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<data>
<news-articles>
<entry>
<image-thumbnail>
penuts_thumb.png
</image-thumbnail>
</entry>
</news-articles>
</data>
产生此输出:
<img src="/workspace/uploads/%0A penuts_thumb.png%0A ">
===========
"
penuts_thumb.png
"
正如我们在第二种情况下看到的那样(感谢引号),字符串"penuts_thumb.png"
也被很多空格字符所包围。
<强>解决方案强>:
以这种方式使用normalize-space()
功能:
<img src=
"{$workspace}/uploads/{normalize-space(/data/news-articles/entry/image-thumbnail)}"/>