2010-06-10 14 views
5

क्या System.ServiceModel.Syndication.SyndicationFeed उदाहरण से निर्धारित करना संभव है कि किस प्रकार का सिंडिकेशन फीड पढ़ा जा रहा है? अगर मेरे पास यूआरएल है (blahblah.com/feed) यह आरएसएस या परमाणु हो सकता है, और उस प्रकार के आधार पर मैं एक चीज़ या दूसरे करना चाहता हूं।.NET सिंडिकेशन फीड (आरएसएस बनाम एटम) के फ़ीड प्रकार को कैसे निर्धारित करें?

क्या दस्तावेज़ को पार्स करने और विशिष्ट वर्णों की तलाश किए बिना बताने का कोई आसान तरीका है?

उत्तर

10

पुराना सवाल, लेकिन यह एक जवाब का हकदार है।

यह निर्धारित करने का एक अपेक्षाकृत सरल तरीका है कि आपको आरएसएस या एटम फ़ीड मिल गया है या नहीं। इसे पढ़ने की आवश्यकता है, या दस्तावेज़ को पढ़ने की कोशिश कर रहा है।

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; 
    } 
} 
+0

देखें मैंने इसका एक और उदाहरण देखा और मुझे याद नहीं आया कि मुझे यह क्यों पसंद नहीं आया। यह बहुत समय पहले था, और यह काम करता है, इसलिए इसे सबसे अच्छा जवाब मानें, धन्यवाद :) – SelAromDotNet

+0

ठीक है तो जब मैं इस फ़ीड को आजमाता हूं (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2) जो कि एटम 2.0 प्रकार का है, आपका कोड लाइन परमाणु के बाद से काम नहीं करता है। कैनराइड (पाठक) झूठी रिटर्न देता है। एटम वेर को संभालने के लिए यहां समाधान क्या है। 2.0? – Marko

+0

यह परमाणु 2.0 नहीं है, जहां तक ​​मुझे पता है। यह मुझे लगता है कि फ़ीड टूट गई है। इसमें जंक है। इसके आसपास काम करने के लिए, मैं इसे पढ़ने की कोशिश करने से पहले फ़ीड को ठीक करने का सुझाव दूंगा। मैंने अभी कोशिश की और यह मेरे लिए यहां काम करता है। – Cheeso

संबंधित मुद्दे