使用XSL添加RSS Feed图像

时间:2013-10-16 08:46:48

标签: xslt rss

我有一个RSS Feed,我将发布到Facebook

问题是图像没有出现但描述和标题工作正常。我们使用XSL文档来创建feed,我相信问题在于:

RSS feed:www.khl.com/access-international

XSL用于生成图像:

  <item>
    <title><xsl:value-of select="name"/></title>
    <link>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></link>
    <description><xsl:value-of select="description"/><![CDATA[
        <img src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/preview}"/><img alt="" 
             border="0" 
             src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/preview}" 
             />
    ]]></description>
    <pubDate><xsl:apply-templates select="creation-date" mode="date-format"/><xsl:value-of select="substring(creation-date,11,16)"/><xsl:text>:</xsl:text>00 GMT</pubDate>
    <guid>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></guid>
      </item>

任何帮助将不胜感激,

此致 萨姆


我已经更新了Feed,但仍然没有运气。

现在,XSL文档中使用的代码为

 <item>
  <title><xsl:value-of select="name"/></title>
  <link>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></link>
  <description>
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:value-of select="description"/>
    <img src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/thumbnail}"/>
    <img alt="" border="0" src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/thumbnail}" />
    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
  </description>
  <pubDate><xsl:apply-templates select="creation-date" mode="date-format"/><xsl:value-of select="substring(creation-date,11,16)"/><xsl:text>:</xsl:text>00 GMT</pubDate>
  <guid>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></guid>
</item>
</xsl:template>

我重新检查了XML,它也正确并指向图像。 Feed可在此处找到:www.khl.com/access-international。仍然没有图片标签

希望我做错了什么

1 个答案:

答案 0 :(得分:1)

虽然标准是(我相信)在您希望描述包含HTML时使用CDATA部分,但您遇到的问题是您的CDATA部分是XSLT中的一个部分,因此将在最初的XSLT文档时进行处理解析。换句话说,CDATA部分中的任何内容都只被视为文本,因此这里使用属性值模板是无关紧要的。

您要求CDATA部分是您正在输出的XML的一部分。现在, xsl:output 上有一个“cdata-section-elements”属性,但这只会影响文本节点的序列化,但不影响元素和属性的序列化。所以,你能做的就是自己有效地“序列化”HTML,就像这样

<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<img src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/preview}"/>

,即你在这里手动写出CDATA部分,因此CDATA被写入输出,但在初始加载XSLT时不被视为CDATA。

请尝试以下代码:

<item>
  <title><xsl:value-of select="name"/></title>
  <link>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></link>
  <description>
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:value-of select="description"/>
    <img src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/preview}"/>
    <img alt="" border="0" src="http://www.khl.com{item-links/item-link[@id=2]/items/item[1]/derived-files/preview}" />
    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
  </description>
  <pubDate><xsl:apply-templates select="creation-date" mode="date-format"/><xsl:value-of select="substring(creation-date,11,16)"/><xsl:text>:</xsl:text>00 GMT</pubDate>
  <guid>http://www.khl.com<xsl:value-of select="$magazine_path" />/detail/<xsl:value-of select="link" /></guid>
</item>

当然,您仍然必须确保将 src 属性写出为正确的值,并实际引用实际存在的图像!