2012-02-25 9 views
0

これはまったく新しいものではありませんが、原子のフィードを正しく読み取るための信頼できるリンクが見つかりませんでした。私はフィードのタイトル、投稿された日付と時刻を取得したいだけです。たとえば、次のリンク http://blogs.technet.com/b/markrussinovich/atom.aspx に私は原子フィードのタイトルと投稿された日付時刻

Title 1: The Case of My Mom’s Broken Microsoft Security Essentials Installation 
Date time : 1-5-2005 12:00  
Title 2:..... 

答えて

3
var xdoc = XDocument.Load("http://blogs.technet.com/b/markrussinovich/atom.aspx"); 
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom"); 

var info = xdoc.Root 
      .Descendants(ns+"entry") 
      .Select(n => 
       new 
       { 
        Title = n.Element(ns+"title").Value, 
        Time = DateTime.Parse(n.Element(ns+"published").Value), 
       }).ToList(); 
1

は、XMLクエリに

XDocument xml = XDocument.Load("http://blogs.technet.com/b/markrussinovich/atom.aspx"); 
XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom"); 
var xmlFeed = from post in xml.Descendants(ns + "entry") 
       select new 
       { 
        Title = post.Element(ns + "title").Value, 
        Time = DateTime.Parse(post.Element(ns + "published").Value) 
       }; 
8

.NET FrameworkがA公開されるこのLINQのを試してみてくださいありがとうござい表示したいと思いますRSS 2.0やAtom 1.0などSyndicated XML Feedを扱うためのクラスとAPIのセットは、にあります名前空間。

基本クラスは、
System.ServiceModel.Syndication.SyndicationFeedは、AtomまたはRSS形式のXMLフィードを表します。
System.ServiceModel.Syndication.SyndicationItemは、フィード内のアイテム、「エントリ」または「アイテム」要素を表し、これらはSyndicationFeed IEnumerable Itemsのプロパティとして公開されています。

個人的には、曖昧なXElementsではなく強く型オブジェクトで直接作業しているので、LinqではなくXMLにSystem.ServiceModel.Syndication名前空間で公開されているクラスとAPIを使用することを好みます。

  WebRequest request = WebRequest.Create(this.Url); 
      request.Timeout = Timeout; 

      using (WebResponse response = request.GetResponse()) 
      using (XmlReader reader = XmlReader.Create(response.GetResponseStream())) 
      { 
       SyndicationFeed feed = SyndicationFeed.Load(reader); 

       if (feed != null) 
       { 
        foreach (var item in feed.Items) 
        { 
         // Work with the Title and PubDate properties of the FeedItem 
        } 
       } 
      } 
+0

タイムアウトプロパティを追加することをお勧めします。 – ScottE

+0

@ScottE WebResponse.GetResponse()を別のスレッドで呼び出すこともできます。タイムアウトは応答時にタイムアウトを捕捉します。 WebRequest.Timeoutは、初期サーバーの応答にのみ適用されます。接続がハングすると、応答が失われます。 – Lloyd