Нечетный вывод XSL в Symphony CMS
Я в 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
Любые мысли о том, почему я получаю все лишние символы?
1 ответ
Output looks correct
Нет, это только "выглядит правильно", потому что браузер игнорирует символы пробела.
Что происходит, что строка "penuts_thumb.png"
окружен пробелами. Когда этот пробел сериализован как часть src
значение атрибута, оно закодировано (нормализовано) - вот почему вы видите %0A
(код для новой строки) и %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)}"/>