代码之家  ›  专栏  ›  技术社区  ›  SelAromDotNet

如何确定.NET联合源的源类型(RSS与Atom)?

  •  5
  • SelAromDotNet  · 技术社区  · 15 年前

    是否可以从 System.ServiceModel.Syndication.SyndicationFeed 实例正在读取哪种类型的联合源?如果我所拥有的只是URL(blahblah.com/feed),那么它可能是RSS或Atom,这取决于我想做的事情的类型。

    有没有一种简单的方法可以在不解析文档和查找特定字符的情况下进行判断?

    1 回复  |  直到 8 年前
        1
  •  9
  •   Cheeso    14 年前

    旧问题,但值得回答。

    那里 确定是否有RSS或Atom提要的相对简单的方法。它确实需要阅读,或者尝试阅读文档。

    public SyndicationFeed GetSyndicationFeedData(string urlFeedLocation)
    {
        XmlReaderSettings settings = new XmlReaderSettings
            {
                IgnoreWhitespace = true,
                CheckCharacters = true,
                CloseInput = true,
                IgnoreComments = true,
                IgnoreProcessingInstructions = true, 
                //DtdProcessing = DtdProcessing.Prohibit // .NET 4.0 option
            };
    
        if (String.IsNullOrEmpty(urlFeedLocation))
            return null;
    
        using (XmlReader reader = XmlReader.Create(urlFeedLocation, settings))
        {
            if (reader.ReadState == ReadState.Initial)
                reader.MoveToContent();
    
            // now try reading...
    
            Atom10FeedFormatter atom = new Atom10FeedFormatter();
            // try to read it as an atom feed
            if (atom.CanRead(reader))
            {
                atom.ReadFrom(reader);
                return atom.Feed;
            }
    
            Rss20FeedFormatter rss = new Rss20FeedFormatter();
            // try reading it as an rss feed
            if (rss.CanRead(reader))
            {
                rss.ReadFrom(reader);
                return rss.Feed;
            }
    
            // neither?
            return null;
        }
    }