【问题标题】:conversion of atom feed to rss feedatom feed 到 rss feed 的转换
【发布时间】:2011-05-15 15:41:34
【问题描述】:

我想将具有 atom 提要的 XML 查找转换为 rss 提要。我使用了以下方法:

public void AtomToRss20(string atomFileName, string rssFileName)
    {
        ConvertToRss20(ReadFeed(atomFileName), rssFileName);
    }

    private static void ConvertToRss20(SyndicationFeed feed, string rssFileName)
    {
        Rss20FeedFormatter rss2 = new Rss20FeedFormatter(feed);
        XmlWriter writer = XmlWriter.Create(rssFileName);
        rss2.WriteTo(writer);
        // You can also use 
        // feed.SaveAsRss20(writer);           
    }

    private static SyndicationFeed ReadFeed(string fileName)
    {
        StreamReader stream = new StreamReader(fileName);
        XmlReader reader = XmlReader.Create(stream);
        SyndicationFeed feed = SyndicationFeed.Load(reader);
        return feed;        
    }

它执行成功,但是当我查看该文件时,我发现它不完整并以缺少结束标签而终止。 有人可以告诉这个或其他转换方法中的问题吗?

【问题讨论】:

  • 如果您向我们展示您尝试转换的文件 + 结果会有所帮助。
  • @Chinmaya - 这个问题的标题应该概括为 XmlWriter 写入不完整的输出。将 Feed 从一种类型转换为另一种类型与问题无关。

标签: xml rss atom-feed


【解决方案1】:

出于性能原因,.NET 中的许多 *Writer 类会缓冲它们的输出;也就是说,它们不会直接写入输出设备,而是将一些数据保留在内存中,直到达到阈值大小。当您关闭/处置写入器时,它会知道您已完成它,并将所有缓冲的数据刷新到输出。

在这里,您创建了一个XmlWriter,但您从未关闭或处置它,因此它可能仍然具有从未刷新的缓冲内容,因此文件不完整。您还因为不处置昂贵的资源而将其打开的时间超过了必要的时间。

用using 块包围实现IDisposable 的类的实例化,例如:

using (XmlWriter writer = XmlWriter.Create(rssFileName))
{
    rss2.WriteTo(writer);
}

这将在块末尾调用写入器的Dispose 方法,并刷新内容。您还应该用using 块包围XmlReader 的实例化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多