2010-11-25 6 views
1

나는 원자 피드를 갖는 XML 찾기를 rss 피드로 변환하려고합니다. 다음과 같은 방법을 사용했습니다 :원자 피드를 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

변환하려는 파일과 결과를 표시하면 도움이됩니다. – jgauffin

+0

@Chinmaya -이 질문의 제목은 불완전한 출력을 작성하는 XmlWriter에 대해 일반화되어야합니다. 한 유형에서 다른 유형으로의 피드 변환은 문제와 관련이 없습니다. – Matt

답변

1

성능상의 이유로 많은 .NET 클래스의 *Writer 클래스는 출력을 버퍼링합니다. 즉, 출력 장치에 직접 쓰지 않고 임계 값 크기에 도달 할 때까지 일부 데이터를 메모리에 유지합니다. 작성자를 닫거나 처분하면 완료된 것으로 알고 버퍼링 된 데이터를 출력으로 플러시합니다.

여기에 XmlWriter을 만들었지 만 결코 닫거나 처리하지 않으므로 플러시되지 않은 콘텐츠가 버퍼링되어 불완전한 파일로 남아있게됩니다. 또한 고가의 자원을 처분하지 않음으로써 필요한 것보다 오래 동안 비싼 자원을 열어두고 있습니다.

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

이 블록의 끝에서 작가의 Dispose 메소드를 호출하고, 내용을 플러시 :

는 예를 들어, using 블록 IDisposable를 구현하는 클래스의 당신의 인스턴스화를 둘러싸고 있습니다. XmlReader이라는 인스턴스를 using 블록으로 묶어야합니다.

관련 문제