0

我有一个要发布到 Facebook 的 RSS 源

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

RSS 提要: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>

任何帮助,将不胜感激,

问候,山姆


我已经更新了我们的提要,但仍然没有运气。

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,它也是正确的并指向图像。提要可在此处找到:www.khl.com/access-international。仍然没有图像标签

希望我做错了什么

4

1 回答 1

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属性写为正确的值,并且实际引用实际存在的图像!

于 2013-10-16T13:16:38.510 回答