Xslt: встраивание изображения в канал RSS - PullRequest
0 голосов
/ 01 ноября 2010

Я использую Umbraco, и мне нужно отобразить изображение в Rss Feed. Фид генерируется Xslt .

Все работает, если я делаю текстовые сообщения. Такие вещи технически возможны, но проанализированный мной канал был создан WordPress.

Проблема в том, что я понятия не имею, как я могу встроить в свой тег.

У меня есть переменная, скажем, "url", которая возвращает полный URL-адрес базового изображения. Как я могу вставить внутри? Помните, что я использую Xslt для достижения этой цели.

<content:encoded>          
  <img src="{$url}" />
</content:encoded>

Я предполагаю, что CDATA должен использоваться, но я не могу экранировать некорректно недопустимые символы: (

Спасибо за вашу помощь.

Roland

1 Ответ

1 голос
/ 02 ноября 2010

Роланд, ты пытаешься избежать вещей дважды. Это не нужно (не говоря уже о безобразии!) Эта страница показывает:

<content:encoded><![CDATA[This is <i>italics</i>.]]></content:encoded>

т.е. они просто избегают разметки внутри <content:encoded> и используют для этого CDATA. В вашем случае CDATA неудобен, потому что вам нужно заменить $ url посередине. Таким образом, вы можете использовать две секции CDATA, обернутые вокруг <xsl:value-of select="$url" />: (с отступом для ясности)

<content:encoded>
  <![CDATA[<img src="]]>
  <xsl:value-of select='$url' />
  <![CDATA[">]]>
</content:encoded>

Но это было бы излишне многословно. Второй раздел CDATA не нужен. И мы можем добиться большего, используя тот же принцип: экранировать символы разметки (один раз), что приведет к тому, что строка будет проанализирована в дереве. В вашем случае, только начальный < должен быть экранирован. Вы можете использовать &lt; вместо CDATA для экранирования <. Поместите это в свой XSLT:

<content:encoded>&lt;img src="<xsl:value-of select='$url' />"></content:encoded>

<xsl:value-of> на самом деле не внутри кавычек, с точки зрения XSLT ... эти кавычки являются просто содержимым текстовых узлов. <xsl:value-of> работает как обычная инструкция XSLT.

Измените select='$url' на select="concat($siteUrl, photo)", если это то, что вам нужно. (Т.е. фотография является дочерним элементом узла контекста, а ее текстовое значение является именем файла изображения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...