我想将具有原子提要的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;
}
它成功执行但当我查看该文件时,我发现它不完整,并以缺少结束标记终止。 有人可以用这个或其他一些转换方法告诉问题。
答案 0 :(得分:1)
出于性能原因,.NET中的许多*Writer
类缓冲了它们的输出;也就是说,它们不直接写入输出设备,而是将一些数据保留在内存中,直到达到阈值大小。当您关闭/处理编写器时,它会知道您已完成它,并将所有缓冲的数据刷新到输出。
在这里,您创建了一个XmlWriter
,但是您永远不会关闭或处置它,因此它可能仍然具有永不刷新的缓冲内容,因此文件不完整。你也将昂贵的资源开放的时间超过了必要的时间,而不是处理它。
使用IDisposable
块围绕实施using
的类的实例化,例如:
using (XmlWriter writer = XmlWriter.Create(rssFileName))
{
rss2.WriteTo(writer);
}
这将在块的末尾调用writer上的Dispose
方法,并刷新内容。您还应该使用XmlReader
块包围using
的实例化。