Роланд, ты пытаешься избежать вещей дважды. Это не нужно (не говоря уже о безобразии!) Эта страница показывает:
<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 не нужен. И мы можем добиться большего, используя тот же принцип: экранировать символы разметки (один раз), что приведет к тому, что строка будет проанализирована в дереве. В вашем случае, только начальный <
должен быть экранирован. Вы можете использовать <
вместо CDATA для экранирования <
. Поместите это в свой XSLT:
<content:encoded><img src="<xsl:value-of select='$url' />"></content:encoded>
<xsl:value-of>
на самом деле не внутри кавычек, с точки зрения XSLT ... эти кавычки являются просто содержимым текстовых узлов. <xsl:value-of>
работает как обычная инструкция XSLT.
Измените select='$url'
на select="concat($siteUrl, photo)"
, если это то, что вам нужно. (Т.е. фотография является дочерним элементом узла контекста, а ее текстовое значение является именем файла изображения.)