将XML转换为RSS

时间:2009-06-30 20:25:48

标签: xml rss xslt

我有一个xml Feed会在我们网站的某个位置发布,并希望将其重新用于RSS源。

网站上的一些不同页面也将引用相同的xml - 所有这些转换都已设置并正常工作。

基本xml文件(XMLTEST.xml)正在使用此结构:

<POST>
  <item>
    <POST_ID>80000852</POST_ID>
    <POST_TITLE>title</POST_TITLE>
    <POST_CHANNEL>I</POST_CHANNEL>
    <POST_DESC>description</POST_DESC>
    <LINK>http://www...</LINK>
    <STOC>N</STOC>
  </item>
</POST>

我正在尝试使用以下设置将xml转换为RSS提要(feed.xml + rss.xsl)

feed.xml:

<?xml-stylesheet href="rss.xsl" type="text/xsl"?>
<RSSChannels>
  <RSSChannel src="XMLTEST.xml"/>
</RSSChannels>

rss.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" omit-xml-declaration="yes" />

  <xsl:template match="RSSChannels">
    <rss version="2.0">
      <channel>
        <title>site title</title>
        <link></link>
        <description>Site description...</description>
        <xsl:apply-templates />
      </channel>
    </rss>
  </xsl:template>

  <xsl:template match="RSSChannel">
    <xsl:apply-templates select="document(@src)" />
  </xsl:template>

  <xsl:template match="item">
    <xsl:choose>
      <xsl:when test="STOC = 'Y'"></xsl:when>
      <xsl:when test="POST_CHANNEL = 'I'"></xsl:when>
      <xsl:otherwise>
        <item>
          <title>
            <xsl:value-of select="*[local-name()='POST_TITLE']" />
          </title>
          <link>
            <xsl:value-of select="*[local-name()='LINK']" />
          </link>
          <description>
            <xsl:value-of select="*[local-name()='POST_DESC']" />
          </description>
        </item>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

当我尝试在Firefox中查看feed.xml的输出时,所有过滤都被正确应用(整理出不应该在该频道中发布的项目),但页面输出为纯文本,而不是通常在Firefox中进行Feed检测。关于我缺少的任何想法?

感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:1)

我很确定你应该设置omit-xml-declaration。请参阅examples at this RSS tutorial