Нечетный вывод XSL в Symphony CMS - PullRequest
       14

Нечетный вывод XSL в Symphony CMS

1 голос
/ 30 декабря 2011

Я нахожусь в 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 Ответ

5 голосов
/ 30 декабря 2011
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)}"/>
...